TFS构建服务器和COM引用 - 这是否有效?

时间:2011-09-21 10:27:48

标签: com tfs build reference

在我的开发者PC上,我已经注册了相应的dll并引用了它们。 (添加参考 - > COM) 在TFS构建服务器上,这当然会导致错误,因为引用没有在那里注册,也不会在将来。

避免这种情况的最佳方法是什么?

3 个答案:

答案 0 :(得分:9)

不需要直接使用tlbimp.exe。尝试使用<COMReference>替换项目文件中的所有<COMFileReference>项。一个例子如下:

<ItemGroup>
   <COMFileReference Include="MyComLibrary.dll">
     <EmbedInteropTypes>True</EmbedInteropTypes>
   </COMFileReference>
</ItemGroup>

无需在机器上注册COM dll即可使用。

每个COMFileReference项也可以有一个WrapperTool属性,但默认似乎工作正常。 EmbedInteropTypes属性未记录为适用于COMFileReference,但它似乎按预期工作。

有关详细信息,请参阅https://docs.microsoft.com/en-ca/visualstudio/msbuild/common-msbuild-project-items#comfilereference。自.NET 3.5以来,此MSBuild项已可用。

答案 1 :(得分:1)

好的,答案比人们想象的要容易得多。 只需使用“tlbimp.exe”创建一个相应的intrerop.dll,它包含在项目中,并引用此dll而不是COM对象。

您可以使用tlbimp.exe保存时间,因为Visual Studio在引用COM对象时会自动创建此dll。 但它不会将其上传到TFS。所以最后我只使用了自动创建的dll,而TFS构建服务器很高兴。

可以在“ProjectFolder \ obj \ x86 \ Development”中找到自动创建的Interop dll

答案 2 :(得分:0)

对于命名空间有问题的任何人:

tl;dr: 使用 tlbImp /namespace: YOUR_NAMESPACE 给你的 dll 一个命名空间


solution 也适用于 Azure Pipeline。但起初我在使用 COMFileReference 时遇到了麻烦。当我用 COMFileReference 替换 COMReference 时,我的 VS 构建失败,说“找不到命名空间”。终于找到了解决方案here

我使用 tlbImp 在此 article 之后使用 /namespace 属性生成 COM 文件的 dll。只有这样您才能使用 COMFileReference 中的 dll。这是一个有点复杂的例子:

<ItemGroup>
   <COMFileReference Include="My/Folder/MyComLibrary.dll">
     <EmbedInteropTypes>True</EmbedInteropTypes>
   </COMFileReference>
</ItemGroup>

<ItemGroup>
   <COMFileReference Include="..\My\parent\folder\MyComLibrary.dll">
     <EmbedInteropTypes>True</EmbedInteropTypes>
   </COMFileReference>
</ItemGroup>