如何使 COMReference 在 Azure CI/CD 管道中工作

How to make COMReference work in Azure CI/CD pipeline

我在我的项目中使用了一个 dll,它作为 COMReference 添加到我的项目文件中,如下所示

<COMReference Include="GENERALCREDITREQUESTMANAGER450Lib">
  <Guid>{BDB6DDB5-5C02-492F-954E-68ED3D8F075D}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>0</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>tlbimp</WrapperTool>
  <Isolated>False</Isolated>
  <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>

现在的问题是它在我的管道构建过程中失败,说 Namespace or type GENERALCREDITREQUESTMANAGER450Lib can't be found 这是可以理解的,因为与其他参考不同,它没有任何 HintPath 来定位 dll。

环顾四周后,我发现这个 article 基本上说使用 tlbImp 生成 dll,然后使用以下语法引用该 dll:

<Reference Include="GENERALCREDITREQUESTMANAGER450Lib">
  <HintPath>InteropAssemblies\GENERALCREDITREQUESTMANAGER450Lib.dll</HintPath>
  <EmbedInteropTypes>true</EmbedInteropTypes>
</Reference>

但是如果我这样做,那么我的 visual studio 构建就会失败,因为即使它被添加到引用中,VS 也找不到命名空间。 post 之一建议使用 COMFileReference 而不是 COMReference,但最终会出现相同的“未找到命名空间”错误。

如何使管道工作?

COMReference 项目要求库在构建服务器上注册,这可能很难做到,具体取决于环境。

在本地使用 tlbimp 并将生成的 .dll 添加到项目源的方式可能更适合您的设置,尽管它需要您将命名空间作为参数传递 (/namspace:GENERALCREDITREQUESTMANAGER450Lib)获得与 COMReference.

相同的结果