Какая разница в настройках 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.