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

TFS构建服务器和COM引用-这有效吗?,com,tfs,build,reference,Com,Tfs,Build,Reference,在我的开发者PC上,我已经注册了相应的dll并引用了它们。(添加引用->COM) 在TFS构建服务器上,这当然会导致错误,因为引用没有在那里注册,将来也不会注册 回避这个问题的最佳方法是什么?好的,答案比人们想象的要简单。 只需使用“tlbimp.exe”创建一个包含在项目中的相应intrerop.dll,并引用此dll而不是COM对象 使用tlbimp.exe可以节省时间,因为当您引用COM对象时,Visual Studio会自动创建此dll。 但它不会将其上载到TFS。最后,我使用了自动创建

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


回避这个问题的最佳方法是什么?

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

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


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

不需要直接使用tlbimp.exe。尝试将项目文件中的任何
项替换为
。示例如下所示:

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

真的
COM dll不需要在计算机上注册就可以工作

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


有关更多详细信息,请参阅。此MSBuild项自.NET 3.5以来一直可用。

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

tl;dr:使用tlbImp/namespace:YOUR_namespace为dll提供名称空间


这也适用于Azure管道。但一开始我在COMFileReference方面遇到了麻烦。当我用COMFileReference替换COMReference时,我的VS构建失败,并说“找不到命名空间”。终于找到了解决办法

我使用tlbImp生成COM文件的dll,并在下面使用/namespace属性。只有这样,您才能在
COMFileReference
中使用dll。这里有一个详细的例子:

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

真的


真的

可能的重复是正确的,Hans,非常感谢-tlbimp是您的朋友。可能的重复感谢您的提示,似乎是更专业的解决方案。这确实帮助了我使用应用服务器上已有的仅供参考的互操作dll。VS2019只会添加一个没有提示路径的COMReference,该路径不适用于Azure DevOps管道构建。将tlbimp处理过的DLL从obj文件夹中取出非常有效。
<ItemGroup>
   <COMFileReference Include="..\My\parent\folder\MyComLibrary.dll">
     <EmbedInteropTypes>True</EmbedInteropTypes>
   </COMFileReference>
</ItemGroup>