Мой оригинальный ответ на аналогичный вопрос см .: Сервер сборки TFS и ссылки на COM - это работает?
Хороший способ компилировать код .NET, который ссылается на компоненты COM безCOM-компоненты, регистрируемые на сервере сборки, должны использовать элемент справки COMFileReference
в ваших файлах проекта / сборки вместо COMReference
.Элемент COMFileReference
выглядит следующим образом:
<ItemGroup>
<COMFileReference Include="MyComLibrary.dll">
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMFileReference>
</ItemGroup>
Поскольку Visual Studio не поддерживает конструктор для COMFileReference
, необходимо отредактировать файл проекта / сборки вручную.
Во время сборки MSBuild извлекает информацию библиотеки типов из библиотеки DLL COM и создает сборку взаимодействия, которая может быть автономной или встроенной в вызывающую сборку .NET.
Каждый элемент COMFileReference
также может иметь атрибут WrapperTool
, но по умолчанию мне показалось, что он работает нормально.Атрибут EmbedInteropTypes
не задокументирован как применимый к COMFileReference
, но, похоже, он работает как задумано.
См. https://docs.microsoft.com/en-ca/visualstudio/msbuild/common-msbuild-project-items#comfilereference для получения дополнительной информации.Этот элемент MSBuild доступен с .NET 3.5.
Жаль, что никто не знает ничего об этой технике, которая мне кажется проще, чем альтернативы.Это на самом деле не удивительно, так как я мог найти только одну ссылку на него онлайн.Я сам обнаружил эту технику, покопавшись в файле MSBuild Microsoft.Common.targets.