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

时间:2017-04-10 18:55:46

标签: c# msbuild migration 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 \微软\融合!EnableLog]。

     

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

18 个答案:

答案 0 :(得分: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

答案 1 :(得分:62)

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

  

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

我正在使用Visual Studio 2017,并且在添加迁移后尝试执行Update-Database。

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

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

答案 2 :(得分:33)

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

答案 3 :(得分:26)

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

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

请按照以下步骤操作:

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

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

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

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将会消失,因为您的DLL现在将通过GAC解析。

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

答案 4 :(得分:11)

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

NuGet tool installer> Version of NuGet.exe to install步骤中,将5.4.0更改为较新的版本,例如void return_array_byref((char[]) & device, (char[]) & command) { device = malloc(8 * sizeof(char)); device[0] = 'C'; device[1] = '\n'; command= malloc(8 * sizeof(char)); command[0] = 'C'; command[1] = '\n'; } void loop() { char * device; char * command; return_array_byref(device, command); ... } 。在https://dist.nuget.org/tools.json上检查版本。

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

答案 5 :(得分:3)

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

enter image description here

建议使用Process Explorer

答案 6 :(得分:2)

关闭重新打开,Visual Studio就像一个吊饰!

答案 7 :(得分:2)

在我的情况下,某些东西(可能是NuGet更新)确实向Web.config-File中添加了AssemblyBinding:

<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之后,我可以再次发布项目。

答案 8 :(得分: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

答案 9 :(得分:1)

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

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

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

答案 10 :(得分:1)

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

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

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

我通过安装Microsoft Build Tools 2015

解决了该问题

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

答案 11 :(得分:0)

我在我的 web.config 中有这部分,然后简单地将其删除,然后它就开始工作了 :)

<compilation debug="true" targetFramework="4.5.2">
    <assemblies>
        <add assembly="Microsoft.Build.Framework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    </assemblies>
</compilation>

答案 12 :(得分:0)

我重新启动,然后我发现我一直在运行的本地 Web 服务被另一个占用该端口的进程阻止。我检查了正在运行的进程并使用 TCPView 终止了该进程,并且所有进程似乎都重新开始工作。

答案 13 :(得分:0)

尝试了所有上述方法和更多方法后-对我来说,运行var zip = new JSZip(); var count = 0; var zipFilename = "zipFilename.zip"; var urls = [ 'http://image-url-1', 'http://image-url-2', 'http://image-url-3' ]; urls.forEach(function(url){ var filename = "filename"; // loading a file and add it in a zip file JSZipUtils.getBinaryContent(url, function (err, data) { if(err) { throw err; // or handle the error } zip.file(filename, data, {binary:true}); count++; if (count == urls.length) { var zipFile = zip.generate({type: "blob"}); saveAs(zipFile, zipFilename); } }); }) 应用仍然失败。错误:WCF ..

注意:尝试重新启动VS,PC,终止进程,清理VS缓存,nuget缓存,obj,bin,.vs,程序包文件夹

对我有用的是删除项目的Could not load file or assembly 'Microsoft.Build.Framework, Version=15.1.0.0文件。显然,其中有一些过时的配置。花费了4个小时才弄清楚。.

答案 14 :(得分:0)

使用Visual Studio 2019社区版。我没有运气就尝试了其他解决方案,但是在清除了NuGet缓存后,该问题似乎已解决。 enter image description here

答案 15 :(得分:0)

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

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

我认为此问题是使用从.NET Core 3.0软件包中安装新XCode / Mono版本的新MSBuild工具引起的。

答案 16 :(得分: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库。这是条目之一的示例:                                          

答案 17 :(得分:0)

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