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


86

当我尝试运行命令“ update-database”时,出现此异常:

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

WRN:程序集绑定日志记录已关闭。要启用程序集绑定失败日志记录,请将注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1。注意:程序集绑定失败日志记录会降低性能。要关闭此功能,请删除注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

无法加载文件或程序集“ Microsoft.Build.Framework,版本= 15.1.0.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件。


1
在德语中,此错误消息显示为:“ Die Datei oder Assembly” Microsoft.Build.Framework,版本= 15.1.0.0,Culture =中性,PublicKeyToken = b03f5f7f11d50a3a“,或其他。
Uwe Keim

Answers:


91

我相信我和您有同样的问题。我没有保存整个错误消息,但是我的错误消息是

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

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

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

这可能会或可能不会解决您的问题,但是我认为我会发帖以防万一。


6
是的,在这种情况下,“关闭并重新打开”似乎是正确的解决方法。
达伦·奥斯特

16
这可行,但是我不认为这是正确的答案。我想一劳永逸地修复它,而不必重新启动VS。
斯坦尼斯拉夫(Stanislav)

1
现在,每次迁移后都会发生这种情况,并且需要重新启动PC才能正常工作。
OverMars

3
我已经尝试了所有建议的解决方案。他们似乎都无法永久解决问题。我必须继续重新启动Visual Studio。
奥古斯托·巴雷托

4
这是Github中的一个未解决问题,请访问github.com/aspnet/EntityFramework6/issues/382
Bil Simser,

99

我们的本地构建脚本正在使用nuget.exe4.7.1.5393)的旧版本来还原NuGet软件包。更新到Visual Studio 2019版本后,我们开始出现此错误16.5.0。更新至nuget.exe5.4.0.6315)的最新版本已为我们解决了该问题。

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


27
当我们在构建服务器上仅安装VS2019时面临着这一挑战。要在我们的Azure DevOps构建中解决此问题,可以在NuGet工具安装程序步骤中请求版本5.4.0。
Smash Elder

3
在TeamCity上从4.3.0升级到5.6。这解决了我的问题。谢谢!
以赛亚

3
就是这样 谢谢一群!从4.4.1转到5.4.0。
DaleyKD

2
@ElderSmash我们也在使用Azure DevOps构建。在我们的情况下,问题是通过更新从安装的NuGet一步解决NuGetToolInstaller@0NuGetToolInstaller@1,即使没有指定一个新的版本。但是不确定,这是否解决了问题的根本原因,还是解决的问题只是清除本地缓存的副作用。
MarkusM

2
@ElderSmash正是我的问题和解决方案,谢谢!
丹妮

41

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

某些Visual Studio扩展正在更改当前目录,并使相对路径无效。

要修复此问题,请在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\


我正在使用Visual Studio专业版,我也应该这样做。我多次收到此错误?

我在IDE(社区版本)下没有MSBuild文件夹,我从“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community”复制了我的MSBuild,它没有解决任何问题。
OverMars

1
我正在使用2017 Pro,这为我解决了这个问题。+1
汤姆·赖特

2
请注意,如果在进行此修复后更新VS2017,则可能必须再次更新devenv.exe.config
Mike Peterson

2
这个答案第二次帮助了我-更新VS2017之后,您需要再次执行此操作,如@MikePeterson所说。
詹姆斯·蒙格

34

我发现至少在运行VS 2017 Professional 15.5.2和Entity Framework 6.1.1的环境中似乎可以很好地解决该问题的解决方法。

基本上,将DLL(以及一些相关的DLL)安装到GAC(全局程序集缓存)中,问题将消失。

跟着这些步骤:

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

  2. 启动Visual Studio 2017开发人员命令提示符

  3. 键入以下命令(将“专业版”替换为您的企业版或社区版,或相应地调整路径):

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"
  1. 重新启动Visual Studio 2017

本质上,当.NET尝试加载DLL时,GAC将(在大多数情况下)具有优先级,而FileNotFoundException将消失,因为您的DLL现在将通过GAC进行解析。

再说一次,它对我有用,这只是一个解决方法,它不能解决核心问题本身,但至少在尝试使用EF迁移时,我不必一直都重新启动VS,这对我来说已经足够了。


1
也为我工作。Visual Studio 2017开发人员命令提示符位于C:\ ProgramData \ Microsoft \ Windows \开始菜单\ Programs \ Visual Studio 2017 \ Visual Studio Tools中,并且必须以管理员身份运行。
DavidLétourneau,

2
仅供参考-当Microsoft升级产品且GAC条目变为无效(较新版本或路径更改..专业版与企业版等)时,这可能会导致问题。尤其是有关升级到最新的15.8.0的问题如果您的项目没有加载(由于使用了此解决方案),请参见此处:developercommunity.visualstudio.com/content/problem/311136/…–
Barry,

11

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

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

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


更新使用的nuget版本也是为我解决问题的方法。
NP83

7

我缺少的文件或程序集版本与问题有所不同。

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

Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

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

我认为我的问题是由于我在VS 2017中发布了使用VS 2015构建的项目而产生的。希望可以帮助遇到同样问题的其他人。


这有助于为我在本地TFS中修复CI构建。我的一台构建服务器没有这些工具,并且由于类似的问题而一直失败。
Budhead2004

4

万一重启Visual Studio无法正常工作,请转到任务管理器/进程资源管理器并学习技巧VBCSCompiler.exe

在此处输入图片说明

建议使用Process Explorer


1
我正在尝试此解决方案“以防万一重启Visual Studio无法正常工作,请转到任务管理器/进程资源管理器和技能VBCSCompiler.exe”并正常工作。
Mohammad Jihad Helal


2

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

<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>

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


2

这对我有用:执行nuget restore命令时发生错误。Nuget版本4.6.2。我有两种方法可以解决此问题。

使用Nuget 4.8.2及更高版本。gacutil / i“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2019 \ Professional \ MSBuild \ Current \ Bin \ Microsoft.Build.Framework.dll


1

我们遇到了这个问题,这是我们需要做的事情:

问题是我们(IDbCommandInterceptor)配置了一个名为HttpRuntime.Cache["somekey"]的数据库命令拦截器,由于某种原因,迁移命令无法运行。消除这种依赖性之后,所有命令都运行完美。也许HttpRuntime无法找到Build Framework dll?

因此,当迁移命令失败时,请检查整个调用堆栈,看看是否存在类似的问题。


非常有趣,我的堆栈跟踪包括使用HttpContext.Current的方法调用。删除它消除了问题。
Timores

0

在macOS上更新XCode / Mono组件时,我遇到了同样的问题。

解决方案是将Visual Studio for Mac更新到最新版本。

我认为这个问题是由于使用了从.NET Core 3.0软件包中安装的新MSBuild工具而导致的,该软件包随新的XCode / Mono版本一起安装。


0

感谢那些已经发布的人。结合以上方法解决了我的情况。我有多个版本的Visual Studio:2015、2017、2019。某个时候,MSBUILD的版本从15.1增至15.9,我通过更新C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe.config文件以指向15.9库解决了此问题。这是条目之一的示例:

<dependentAssembly>
      <assemblyIdentity name="Microsoft.Build.Utilities.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
      <bindingRedirect oldVersion="2.0.0.0-99.0.0.0" newVersion="15.9.0.0"/>
      <codeBase version="15.9.0.0" href="..\..\MSBuild\15.0\Bin\Microsoft.Build.Utilities.Core.dll" />
</dependentAssembly>

2
您的榜样似乎消失了。
詹默
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.