【问题标题】:How to make COMReference work in Azure CI/CD pipeline如何使 COMReference 在 Azure CI/CD 管道中工作
【发布时间】:2021-04-13 08:32:24
【问题描述】:

我在我的项目中使用了一个 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 也无法找到命名空间。其中一篇文章建议使用COMFileReference 而不是COMReference,但最终会出现相同的“未找到命名空间”错误。

我怎样才能使管道工作?

【问题讨论】:

  • 当您手动使用tlbImp 时,您是否使用了它的/namspace:GENERALCREDITREQUESTMANAGER450Lib 选项? - Reference
  • @MartinUllrich:就是这样!非常感谢!如果您将其发布为答案,我将接受它作为答案。

标签: azure-pipelines csproj azure-pipelines-build-task


【解决方案1】:

COMReference 项目要求库在构建服务器上注册,这可能很难根据环境进行。

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

【讨论】:

  • 未来用户的注意事项。 ComFileReference 在使用 /namespace 后也可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2020-10-13
  • 2021-12-28
  • 1970-01-01
相关资源
最近更新 更多