对于我原来的回答类似的问题,请参阅:TFS Build server and COM references - does this work?
编译引用COM组件没有被登记在构建服务器是COM组件.NET代码的一个好办法在项目/构建文件中使用COMFileReference
参考项而不是COMReference
。一个COMFileReference
项目看起来是这样的:
<ItemGroup>
<COMFileReference Include="MyComLibrary.dll">
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMFileReference>
</ItemGroup>
由于Visual Studio提供了COMFileReference
没有设计师的支持,你必须编辑项目/手工打造的文件。
在构建期间,MSBuild从COM DLL中提取类型库信息,并创建一个interop程序集,该程序集可以是独立的或嵌入调用的.NET程序集。
每个COMFileReference
项目也可以有一个WrapperTool
属性,但默认情况下似乎对我来说很好。 EmbedInteropTypes
属性没有记录为适用于COMFileReference
,但它似乎按预期工作。
请参阅http://msdn.microsoft.com/en-us/library/bb629388.aspx了解更多细节。这个MSBuild项目自.NET 3.5起可用。
这是一个耻辱,没有人似乎知道任何关于这种技术,这对我来说似乎比替代品简单。这实际上并不令人意外,因为我只能在网上找到上面提到的那个。我自己通过挖掘MSBuild的Microsoft.Common.targets文件发现了这种技术。
在.NET中COM通常是通过Interop完成的,以便在.NET中注册.DLL,它们被称为程序集,可以通过多种方法完成......通过在项目级别通过VS IDE添加引用或编写代码并通过.Config文件卸载程序集,该文件具有对程序集的引用以及在该项目中对该引用的使用... GAC .. – MethodMan 2012-01-12 21:45:12
当您构建时,注册是永远不需要的。 COM使用类型库来公开接口。如果你看到Regasm.exe被使用,那么你做错了。使用Tlbexp.exe – 2012-01-12 22:43:26