如何在构建服务器上构建依赖于第三方 COM 库的项目?

How to build a project that relies on a third party COM library on a build server?

我正在开发一个项目,该项目使用第三方 COM 库作为参考,我想在 Visual Studio Team Services 构建客户端上构建该项目。我的第一个想法是创建一个 MSBuild 任务来检查本地计算机上是否安装了 COM 库,如果没有,则继续安装它,但这似乎是一种非常混乱的方法。我四处搜索,但似乎所有答案都可以追溯到几年前,而且我似乎无法让我找到的少数答案在 VS 2013 项目中发挥作用。其他人是如何解决这个问题的?有更清洁的方法吗?

作为参考,我也试过this solution,看起来很干净,但没有用。

我会走以下路线之一:

  • 使用tlbimp生成互操作dll,将其添加到您的项目中并直接引用它:
    • 在VS命令提示符下,执行tlbimp.exe <your_dll>生成interop dll。您可以使用 /out 选项指定名称。
    • 将此 dll 与您的代码放在一起
    • 通过转至 Add reference > Browse 并单击 Browse... 添加 dll 来引用它
  • 从 COM dll 生成 tlb,将其添加到项目并引用 tlb:
    • 生成 tlb(例如使用 OLE/COM Object viewer) or extract it from the dll resources
    • 将此 tlb 与您的代码放在一起
    • 通过转至 Add reference > COM 并单击 Browse... 将 tlb 引用添加到项目
    • 来引用它
    • 正如@HansPassant 在评论中指出的那样,此解决方案仍然依赖于注册表,但您可以使用 regtlbregtlib 或类似工具将其注册为预构建步骤,这应该比安装服务器(尽管如果它只是一个 dll,您可以使用 regsvr32 来注册它而不是完全安装)。但是,这仍然比使用 interop dll
    • 的方法更复杂