Яка різниця в налаштуванні Embed Interop Type true і false у Visual Studio?


121

У візуальній студії, додаючи одну посилання на проект, у вікні властивостей є параметр Embed Inteop Types, чи слід його встановити на Trueабо False? Яка різниця?

Оскільки у нас дуже багато проектів, серед деяких з них було посиланням на Falseінші, на інших було налаштовано True, це повністю заплутано. І сервер bulid також має такі ж попередження:

Що означає "посилання, створене для вбудованої інтеропної збірки"?

Таким чином , ми плануємо змінити все , Embed Inteop Typesщоб False, який ризик ми хотіли б отримати?


4
Ніколи цього не роби, це надзвичайно приголомшлива функція, яка вирішує набридливі деталі розгортання. Ви повинні зрозуміти COM, щоб по-справжньому бачити, про що це все.
Ганс Пасант

@HansPassant, ти кажеш, ніколи не встановлюй їх falseі ніколи не змінюй їх (наприклад, якщо вони за замовчуванням falseвже є)?
noelicus

2
Він планує встановити його на False. Ніколи цього не робіть.
Ганс Пасант

3
@HansPassant, як ти користуєшся набридливим і чужим. це дуже британтно: D
Mafii

4
@Mafii Я подумав, що grok був від Stranger in the Strange Land (яка є американською). Це не означає, що британці, можливо, більше не використовують це, звичайно!
UuDdLrLrSs

Відповіді:


79

Ця опція була введена для того, щоб усунути необхідність розгортання дуже великих ПІА (первинних Interop зборів) для інтеропу.

Він просто вбудовує керований мостиковий код, який використовується, що дозволяє спілкуватися з некерованими збірками, але замість того, щоб все вставляти, він створює лише ті речі, які ви фактично використовуєте в коді.

Детальніше читайте у публікації про блог Скотта Хензельмана та інші поліпшення VS тут .

Щодо того, радимо це чи ні, я не впевнений, оскільки мені не потрібно використовувати цю функцію. Швидкий пошук в Інтернеті дає кілька результатів:

Єдиний ризик перетворити їх на помилкові - це більше проблем із розгортанням файлів PIA та більшого розгортання, якщо деякі з цих файлів великі.


1
Зауважте, що існує досить значна різниця, яка може порушити існуючий код при відключенні Embed Interop Tips . Різниця згадується тут : «C # 4 і більш пізні версії, перетворює повертається об'єкт в динамічний автоматично , якщо збірка посилається опція компілятора / посилання або, що еквівалентно, якщо типи нерухомості Excel Код Interop встановлюється істина. True - це значення за замовчуванням для цієї властивості. "
Дірк Волмар

Вбудовані збірки interop створювали мені проблеми в системі з підключенням, в якій і хост, і плагіни залежали від одного і того ж COM- об’єкта. Іншою проблемою було злиття таких збірок з ILMerge .
Ant_222

8

Я помітив, що коли його встановлено на значення false, я можу побачити значення елемента за допомогою налагоджувача. Коли було встановлено значення true, я отримував помилку - item.FullName.GetValue Вбудований тип interop 'FullName' не містить визначення для 'QBFC11Lib.IItemInventoryRet', оскільки він не використовувався у складеній збірці. Подумайте про введення об’єкта або змінення властивості "Embed Interop Type" на true.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.