无法加载文件或程序集'Microsoft.Build.Framework'(VS 2017)

Ole*_*nko 59 c# migration msbuild visual-studio-2017

当我尝试运行命令"update-database"时,我得到以下异常:

指定'-Verbose'标志以查看应用于目标数据库的SQL语句.System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.Build.Framework,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.文件名:'Microsoft.Build.Framework,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'

警告:装配绑定日志记录已关闭.要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1.注意:程序集绑定失败日志记录会导致一些性能损失.要关闭此功能,请删除注册表值[HKLM\Software\Microsoft\Fusion!EnableLog].

无法加载文件或程序集"Microsoft.Build.Framework,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a"或其依赖项之一.系统找不到指定的文件

Cor*_*ith 100

我们的本地构建脚本使用旧版本的nuget.exe( 4.7.1.5393) 来恢复 NuGet 包。更新到 Visual Studio 2019 版本后,我们开始收到此错误16.5.0。更新到最新版本的nuget.exe( 5.4.0.6315) 为我们解决了这个问题。

nuget.exe可以在这里下载:https://www.nuget.org/downloads

  • 当我们在构建服务器上仅安装 VS2019 时,就面临着这个挑战。要在我们的 Azure DevOps 构建中修复此问题,可以在 NuGet 工具安装程序步骤中请求版本 5.4.0。 (27认同)
  • 在我的 TeamCity 上从 4.3.0 升级到 5.6。这解决了我的问题。谢谢! (3认同)
  • 就是这样。非常感谢!从 4.4.1 升级到 5.4.0。 (3认同)
  • @ElderSmash 我们也在使用 Azure DevOps 构建。在我们的例子中,问题是通过将 NuGet 安装程序步骤从“NuGetToolInstaller@0”更新为“NuGetToolInstaller@1”解决的,即使没有指定较新的版本。但不确定这是否解决了问题的根本原因,或者修复只是清除本地缓存的副作用。 (2认同)
  • @ElderSmash 这正是我的问题和解决方案,谢谢! (2认同)
  • `nuget.exe update -self` 是另一种可能有效的变体 (2认同)
  • 这就是我喜欢 stackoverflow 的原因。我花了几个小时搞乱了这个,试图找出它为什么会建立。我已经尝试了一切。将其更改为新版本的 nuget 立即修复了该问题。 (2认同)

小智 73

我相信我遇到了和你一样的问题(我没有保存整个错误信息,但我的错误信息是

' 无法加载文件或程序集'Microsoft.Build.Framework,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件."

我正在使用Visual Studio 2017,并尝试在Add-Migration之后执行Update-Database.

为解决此问题,我关闭了Visual Studio并重新打开它,然后再次重新运行Update-Database.

这可能会或可能不会解决您的问题,但我想我会发布以防万一它会有所帮助.

  • 这有效,但我不认为这是一个正确的答案.我想一次又一次地修复它,而不必重新启动VS. (11认同)
  • 是的,在这种情况下,似乎"Turn-It-Off-And-On-Again"是解决问题的正确途径. (4认同)
  • 这是Github中的一个未解决的问题https://github.com/aspnet/EntityFramework6/issues/382 (4认同)
  • 我已经尝试了所有提出的解决方案.他们似乎都没有永久解决问题.我必须继续重启Visual Studio. (2认同)

小智 38

此问题的根本原因来自devenv.exe.config文件中的相对路径Microsoft.Build.Framework.dll(请参阅xml标记).

某些Visual Studio Extensions正在更改当前目录并使相对路径无效.

要解决此问题,请在C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\目录中打开此文件.并更换所有..\..\MSBuild\15.0\Bin\C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\.

  • 请注意,如果在进行此修复后更新VS2017,则可能必须再次更新devenv.exe.config (2认同)
  • 这个答案只是第二次帮助了我-更新VS2017之后,您需要再次执行此操作,如@MikePeterson所说。 (2认同)

小智 28

我找到了一个似乎可以很好地解决问题的解决方法,至少在运行VS 2017 Professional 15.5.2和Entity Framework 6.1.1的环境中是这样.

基本上,将DLL(带有一些相关的)安装到GAC(全局程序集缓存)中,问题就会消失.

跟着这些步骤:

1-关闭Visual Studio 2017的所有正在运行的实例

2-启动Visual Studio 2017 Developer命令提示符

3-键入以下命令(将Professional替换为您的版本,Enterprise或Community,或相应地调整路径):

gacutil/i"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Framework.dll"

gacutil/i"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.dll"

gacutil/i"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Engine.dll"

gacutil/i"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Conversion.Core.dll"

gacutil/i"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Tasks.Core.dll"

gacutil/i"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Build.Utilities.Core.dll"

4-重新启动Visual Studio 2017

从本质上讲,当.NET尝试加载DLL时,GAC将(在大多数情况下)优先使用,而FileNotFoundException将会消失,因为现在可以通过GAC解析DLL.

同样,它适用于我,它只是一个解决方法,它不会解决核心问题本身,但至少我不必在尝试使用EF迁移时一直重启VS,这对我来说已经足够了.

  • 通过社区版为我工作 (2认同)
  • 仅供参考-当Microsoft升级产品并且GAC条目变为无效(较新版本或路径更改..专业版与企业版等)时,这可能会导致问题。尤其是有关升级到最新的15.8.0的问题如果您的项目没有加载(由于使用了此解决方案),请参见此处:https://developercommunity.visualstudio.com/content/problem/311136/update-to- 1580-projects-wont-load.html?childToView = 313622#comment-313622 (2认同)

Alf*_*ace 12

这对我有用 - 从 2020 年开始似乎是一个非支持问题。

Azure Build Pipeline>NuGet tool installer步骤中,更改Version of NuGet.exe to install为更新的版本,例如5.4.0. 在https://dist.nuget.org/tools.json检查版本。

问题消失了,现在构建成功。

  • 更新使用的 nuget 版本也是我解决问题的方法。 (2认同)

V-S*_*SHY 10

我丢失的文件或程序集版本与问题不同。

当我尝试发布我的 ASP.net 项目时出现此错误

Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Run Code Online (Sandbox Code Playgroud)

我通过安装Microsoft Build Tools 2015解决了这个问题

我认为我的问题是因为我在 VS 2017 中发布了用 VS 2015 构建的项目。希望可以帮助其他有同样问题的人。


Mic*_*hev 6

以下对我有用:

MSBuildLocator.RegisterDefaults();在实际使用任何 MSBuild 方法之前添加。

要添加它,您需要安装 Microsoft.Build.Locator。不要指定 ExcludeAssets=runtime。安装 Microsoft.Build,并为此指定 ExcludeAssets=runtime。

从https://github.com/microsoft/MSBuildLocator/issues/64找到了此解决方案。

我不喜欢这里的其他一些解决方案,因为它们似乎让您弄乱了比我想要的更多的配置文件。这个解决方案只需添加一行代码并安装一些包:)

当然,其他的也可以!我只是不太相信自己会搞乱配置,以免弄乱其他东西。


小智 5

就我而言,某些东西(可能是 NuGet-Update)确实将 AssemblyBinding 添加到了 web.config 文件中:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

删除该 dependentAssemby-Entry 后,我可以再次发布该项目。