无法加载文件或程序集 Microsoft.Build.Utilities.Core为什么 DotNetCompilerPlatform 依赖于旧的 Build.Utilities.Core?

问题描述

我从 github 下载了一个示例 C# 项目:https://github.com/dotnet/AspNetDocs

但是我在构建时收到一条错误消息: 无法从程序集中加载“KillProcess”任务“......Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\build\net472....\tasks\DotNetCompilerPlatformTasks。 dll'。 无法加载文件或程序集“Microsoft.Build.Utilities.Core,Version=14.0.0.0,...”或其依赖项之一。系统找不到指定的文件

我使用的是 Visual Studio 2013 更新 5。我的项目的目标框架是 .NET Framework 4.8。

我已经安装了 Nuget 包: Microsoft.CodeDom.Providers.DotNetCompilerPlatform v3.6.0 Microsoft.Build.Utilities.Core v16.9.0

根据错误提示,Nuget包DotNetCompilerPlatform似乎需要旧的Build.Utilities.Core v14.0.0.0,而我安装的是最新版本V16.9.0。

但我在 Uninstall-Package v16.9.0 后未能 nuget Install-Package the v14.0.0.0。

是否可以配置 DotNetCompilerPlatform 以使用最新的 Build.Utilities.Core?

谢谢大家。周末愉快。

解决方法

在我这边,我发现问题与在本地计算机上验证这些已安装的 NuGet 包有关。

首先,您应该将ProductsApp文件夹的完整路径缩短一点。否则,您将面临The fully qualified file name must be less than 260 characters的问题。 >

因此您必须将 ProductsApp 文件夹直接复制到 C:\D:\ 中,然后在该路径上的 VS IDE 下打开它。

之后,重新安装 nuget 包一次。

运行

update-package -reinstall工具-->Nuget Package Manager-->Package Manager Console

之后,如果您仍然遇到问题,则必须在bindredirect文件下为该新dll添加web.config,如果您使用最新版本的功能,它可以使用最新版本。而且它只是找不到旧版本的dll,因为您在代码编辑器下使用了旧版本的代码。

解决方法是为其添加 bindredirect:

1) 打开 web.config 文件:

2) 添加这些:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      .....
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Build.Utilities.Core" publicKeyToken="xxx" />
        <bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
 </runtime>

3) 然后删除 binobj 文件夹,然后重新构建。