【问题标题】:Could not load assembly Microsoft.Build.Utilities.Core Version=15.1.0.0无法加载程序集 Microsoft.Build.Utilities.Core 版本 = 15.1.0.0
【发布时间】:2020-03-10 12:27:35
【问题描述】:

我在运行用于转换我的配置文件的 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.

任务的作用:

  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>
  1. 它针对 msbuild 运行此文件:C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\msbuild.exe .\_msbuild.proj /t:Transform

我已经看过this answer which suggests it is a nuget package and might be corrupted。我认为情况并非如此,因为我项目中的其他人都没有这个问题。我也确实有问题的 dll - Microsoft.Build.Utilities.Core 但是在不同的地方安装了更高版本(16.4.0)以及 dotnet 和 VS 安装。

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

我在这个问题上卡了将近一天,动弹不得。

【问题讨论】:

    标签: .net visual-studio msbuild


    【解决方案1】:

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

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

    并且C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\msbuild.exe .\_msbuild.proj /t:Transform表示你使用的是Framework的msbuild。

    更详细的解释

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

    另外Microsoft.Web.Publishing.Tasks.dll 只是 VS2019 的 msbuild 的一部分,所以它可以被 VS2019 的 msbuild 识别。但是这个dll不在C:\Windows\Microsoft.NET\Framework64\v4.0.30319\xxxx下,所以使用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) 或者直接使用Developer Command Prompt

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

    希望对你有帮助。

    【讨论】:

    • 我认为我的问题在于整个 gulp 设置。根据您的回答,我发现 gulp 支持 VS 2017 但显然不支持 2019,这可能是一个问题。其他在该项目中时间较长的人没有这个问题,而在我之前加入的一个人也有这个问题。所以我想这是一个gulp问题。我会将您的答案标记为正确,因为它解释了为什么会发生这种情况。
    • 我有同样的错误信息,我已经在使用开发者命令提示符了。
    • 谢谢你,非常有用。我的 VS2019 社区的 MSBuild.exe 在这里:C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin
    【解决方案2】:

    在我的情况下,当我的脚本尝试使用旧版本的 Nuget 来恢复包时发生此错误。

    我下载了 Nuget 5.5,它是与 VS 2019 兼容的版本(您可以在 VS2019 的“帮助”>“关于”中看到它)并且问题消失了。

    您可以从以下位置下载它: https://www.nuget.org/downloads

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      相关资源
      最近更新 更多