在我的开发电脑上,我已经注册了相应的dll并引用了它们。(添加引用 -> COM)
在TFS构建服务器上,这当然会导致错误,因为这些引用没有在那里注册,并且将来也不会注册。
如何绕过这个问题是最好的方法?
如何绕过这个问题是最好的方法?
不必直接使用tlbimp.exe。尝试将项目文件中的任何<COMReference>
项替换为<COMFileReference>
。示例如下:
<ItemGroup>
<COMFileReference Include="MyComLibrary.dll">
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMFileReference>
</ItemGroup>
好的,答案比人们想象的要简单得多。 只需使用"tlbimp.exe"创建相应的interop.dll,并将其包含在您的项目中,并引用该dll而不是COM对象。
您可以节省时间使用tlbimp.exe,因为Visual Studio在引用COM对象时会自动创建此dll。 但它不会将其上传到TFS。 因此,最终我只使用了自动创建的dll,而TFS构建服务器也很满意。
可以在“ProjectFolder\obj\x86\Development”中找到自动创建的Interop dll。
对于任何遇到命名空间问题的人:
简而言之:使用tlbImp /namespace: YOUR_NAMESPACE为您的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>