【问题标题】:.NET Core error on build: error MSB4062 Microsoft.Build.Tasks.ResolveComReference构建时出现 .NET Core 错误:错误 MSB4062 Microsoft.Build.Tasks.ResolveComReference
【发布时间】:2019-11-17 21:11:58
【问题描述】:

我正在开发一个 .net 核心网络应用程序(针对 net461)。 应用需要引用 COM dll。

我添加了 COM 引用,并且该应用仍然在我的开发机器上构建。 但是,在构建服务器上,它无法构建并出现此错误:

C:\Program Files (x86)\dotnet\sdk\2.0.0\Microsoft.Common.CurrentVersion.targets(2604,5):错误 MSB4062:“Microsoft.Build.Tasks.ResolveComReference”任务无法从程序集 Microsoft.Build.Tasks.Core 加载

经过一番搜索,这似乎是一个非常罕见的错误。 任何人都知道错误是什么和/或如何解决它?


更新:似乎 dotnet CLI 不支持 COM 引用。 Visual Studio 直接在幕后使用 msbuild,但在构建服务器上,我使用的是 dotnet CLI 命令。

解决方法:

  1. 引用 COM dll 并重建。 Visual Studio 将生成一个互操作 dll。它将被命名为 Interop.MyComDLL.dll 之类的名称。它位于构建输出目录中。
  2. 将生成的 Interop dll 复制到应用程序的某个位置(我只是 在根应用程序级别使用 /dlls 文件夹)。
  3. 删除 COM dll 引用。
  4. 添加对 Interop dll 的直接引用(依赖项 > 添加引用... > 在 Visual Studio 中浏览)

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core .net-core


    【解决方案1】:

    如果您尝试使用与构建服务器上相同的命令来构建它,它也会在开发者机器上失败,例如

    dotnet.exe build Solution.sln --configuration Release --no-incremental
    

    VS 使用 msbuild 构建解决方案,这是一种不同的方式。

    【讨论】:

    • 正确。如果需要,请参阅我的更新以获取解决方法@Danila
    【解决方案2】:

    我的建议是使用动态进行任何 COM 互操作,如果您希望将来更容易更改,请创建一个包含您需要访问的所有 COM 属性和方法的接口。

    创建一个类,实现接口,作为构造函数的一部分动态创建 COM 对象。然后实现每个方法和属性以访问您创建的动态对象。

    这应该消除任何构建时间依赖性,为您的代码的其余部分提供一个可以依赖的接口,并在以后根据需要提供一种简单的方式离开 COM。

    您可能还会发现 Rick Strahl 关于 .Net Core 中 COM 的文章很有用?

    https://weblog.west-wind.com/posts/2019/Jan/22/COM-Object-Access-and-dynamic-in-NET-Core-2x

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 2019-11-26
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多