无法加载程序集 Microsoft.Build.Utilities.Core Version=15.1.0.0

Szy*_*iak 0 .net msbuild visual-studio

我在运行 gulp 任务以转换我的配置文件时遇到问题。它报告以下错误:

error MSB4062: The "TransformXml" task could not be loaded from the assembly C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VisualStudio\v16.0\Web\Microsof t.Web.Publishing.Tasks.dll. Could not load file or assembly 'Microsoft.Build.Utilities.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. Confi rm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.
Run Code Online (Sandbox Code Playgroud)

任务的作用:

  1. 它创建一个_msbuild.proj包含要转换的配置文件的文件。文件看起来是这样的(显然 Source、Transform 和 Destination 都是用真实数据填充的):
<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="TransformXml" AssemblyFile="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
    <Target Name="Transform">
        <TransformXml Source="" Transform="" Destination=""/>
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
  1. 它针对 msbuild 运行此文件: C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\msbuild.exe .\_msbuild.proj /t:Transform

我已经看到了这个答案,它表明它是一个 nuget 包并且可能已损坏。我不认为是这种情况,因为我项目中的其他人都没有这个问题。此外,我确实有有问题的 dll -Microsoft.Build.Utilities.Core但是在安装 dotnet 和 VS 的各个地方安装了更高版本(16.4.0)。

我看到的唯一区别是我使用的是 VS 2019 并且Microsoft.Web.Publishing.Tasks.dll在磁盘上的不同位置(一个包含 TransformXml taks 并依赖于缺少的库的库)与 gulp 转换模块中的位置不同 - 我有它,C:\Program Files (x86)\Microsoft Visual Studio而其他人有它在C:\Program Files (x86)\MSBuild

我现在被这个问题困了将近一天,动弹不得。

Mr *_*ian 6

无法加载程序集 Microsoft.Build.Utilities.Core Version=15.1.0.0

我认为问题在于您使用的msbuild.exe是 Framework 版本而不是 VS2019 的 msbuild。

并且 C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\msbuild.exe .\_msbuild.proj /t:Transform意味着您使用Framework 的msbuild。

为了更详细地解释它

VS2019的MSBuild集成了多种vs环境参数,直接关系到你在vs中的各种操作,而框架的msbuild只有最基本的编译工程功能,没有TransformXmltask。

此外Microsoft.Web.Publishing.Tasks.dll只是VS2019的msbuild的一部分,所以它可以被VS2019的msbuild识别。但是这个dll不在C:\Windows\Microsoft.NET\Framework64\v4.0.30319\xxxx.m下,所以用Framework的msbuild不能得到你想要的

解决方案

作为解决方法,您应该使用 VS2019 的 MSBuild 来对应Microsoft.Web.Publishing.Tasks.dll其文件夹中存在的内容。

1)用于 C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MSBuild.exe执行_msbuild.proj.

2)或者只是使用开发人员命令提示符

而且我认为其他人也使用过这个 msbuild。

希望能帮到你。