构建时出现.NET Core错误:错误MSB4062 Microsoft.Build.Tasks.ResolveComReference

时间:2017-11-01 19:22:48

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

我正在研究.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中浏览)

2 个答案:

答案 0 :(得分:0)

如果您尝试使用与构建服务器上相同的命令构建它,它也应该在开发人员计算机上失败,例如。

dotnet.exe build Solution.sln --configuration Release --no-incremental
使用msbuild的VS构建解决方案,它的方式不同。

答案 1 :(得分:0)

我的建议是使用动力学进行任何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

希望这会有所帮助:)