CodeDom - XML флаг в некотором здравом смысле


Если я просмотрю .csproj моего тестового решения я вижу флаг следующим образом:

<ItemGroup>
<Reference Include="Interop.Encore">
<HintPath>............\Interop.Encore.dll</HintPath>
**<EmbedInteropTypes>False</EmbedInteropTypes>**
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>

Мой вопрос si мне нужно установить EmbedInteropTypes в false в проекте CodeDom, прежде чем он генерирует a .DLL сама по себе. (dll, которая содержит не EmbedInteropType dll)

У кого-нибудь есть решение ?

Я смотрю на

_CurrentCodeFile.AssemblyCustomAttributes.Add(
   new CodeAttributeDeclaration("EmbedInteropTypes", new CodeAttributeArgument[] { new 
      CodeAttributeArgument(
         new CodePrimitiveExpression(false))}));

Есть предложения ?

1 2

1 ответ:

Во-первых, я думаю, что вы неправильно понимаете, что такое атрибуты сборки. Они обычно помещаются в AssemblyInfo.cs и выглядят как [assembly:AssemblyCultureAttribute("de")]. И нет никакого атрибута EmbedInteropTypes, который я мог бы найти.

Теперь, основываясь на моих тестах со ссылками на сборки COM с помощью CodeDOM, вам не нужно делать ничего особенного, если вы не хотите внедрять сборку взаимодействия, просто ссылайтесь на нее.

С другой стороны, если вы хотите внедрить его, вам нужно будет явно использовать параметр командной строки /link , установив CompilerOptions.