Какая разница в настройках Embed Interop Типы true и false в Visual Studio?
В Visual Studio при добавлении одной ссылки на проект окно свойств имеет опцию Embed Inteop Types
, следует ли установить ее на True
или False
? Какая разница?
Поскольку у нас много проектов, среди некоторых из них ссылка была установлена на False
, другие были установлены на True
, это полностью беспорядок. И сервер bulid также имеет те же предупреждения:
Что означает ссылка на встроенную сборку interop? <? >
Итак, мы планируем изменить все Embed Inteop Types
на False
, какой риск мы получим?
Ответы
Ответ 1
Этот параметр был введен для того, чтобы удалить необходимость развертывания очень больших PIA (первичных сборочных сборок) для взаимодействия.
Он просто использует управляемый код моста, который позволяет вам разговаривать с неуправляемыми сборками, но вместо того, чтобы внедрять его, он создает только тот материал, который вы фактически используете в коде.
Подробнее в сообщении Scott Hanselman об этом и других улучшениях VS здесь.
Что касается того, рекомендуется ли это или нет, я не уверен, поскольку мне не нужно использовать эту функцию. Быстрый поиск в Интернете дает несколько результатов:
Единственный риск превратить их все в false - это больше проблем с установкой PIA файлов и более крупного развертывания, если некоторые из этих файлов большие.
Ответ 2
Я заметил, что когда он установлен в false, я могу видеть значение элемента с помощью отладчика.
Когда он был установлен в true, я получал сообщение об ошибке - item.FullName.GetValue. Вложенный тип взаимодействия "FullName" не содержит определения для "QBFC11Lib.IItemInventoryRet", поскольку он не использовался в скомпилированной сборке. Подумайте о том, чтобы отличить объект или изменить свойство "Вставить типы вторжений" в значение true.