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

问题描述 投票:51回答:8

当我尝试运行命令“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”或其依赖项之一。系统找不到指定的文件

c# msbuild migration visual-studio-2017
8个回答
63
投票

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

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

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

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

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


35
投票

此问题的根本原因来自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\


27
投票

我找到了一个似乎可以很好地解决问题的解决方法,至少在运行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,这对我来说已经足够了。


4
投票

以防重新启动Visual Studio不起作用转到任务管理器/进程资源管理器和技能VBCSCompiler.exe

enter image description here

建议使用Process Explorer


2
投票

关闭并重新打开Visual Studio就像一个魅力!


1
投票

我们遇到了这个问题,这就是我们在案例中需要做的事情:

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

因此,当迁移命令无法查看是否存在类似问题时,请检查整个callstack。


1
投票

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

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

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

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

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


0
投票

模型中的复杂类型也可能导致此问题。示例:如果您的模型中有List。

© www.soinside.com 2019 - 2024. All rights reserved.