无法加载文件或程序集“Microsoft.Build.Framework”(VS 2017)
Posted
技术标签:
【中文标题】无法加载文件或程序集“Microsoft.Build.Framework”(VS 2017)【英文标题】:Could not load file or assembly 'Microsoft.Build.Framework'(VS 2017) 【发布时间】:2017-09-05 22:54:34 【问题描述】:当我尝试运行命令“update-database”时,我得到了这个异常:
指定“-Verbose”标志以查看正在应用的 SQL 语句 到目标数据库。 System.IO.FileNotFoundException:不能 加载文件或程序集 'Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其之一 依赖关系。该系统找不到指定的文件。文件名: 'Microsoft.Build.Framework,版本=15.1.0.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a'
警告:程序集绑定日志记录已关闭。启用程序集绑定 失败记录,设置注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 为 1。注意:有 是与装配绑定失败相关的一些性能损失 记录。要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
无法加载文件或程序集“Microsoft.Build.Framework, 版本=15.1.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a' 或 它的依赖项之一。系统找不到指定的文件。`
【问题讨论】:
在德语中,此错误消息显示:“Die Datei oder Assembly "Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" oder eine Abhängigkeit davon wurde nicht gefunden" . 安装微软构建工具 【参考方案1】:我相信我遇到了和你一样的问题。我没有保存整个错误消息,但我的错误消息是
'无法加载文件或程序集'Microsoft.Build.Framework, 版本=15.1.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a' 或 它的依赖项之一。系统找不到指定的文件。'
我正在使用 Visual Studio 2017 并试图在 Add-Migration
之后执行 Update-Database
。
为了解决这个问题,我关闭了 Visual Studio 并重新打开它,然后再次重新运行 Update-Database
。
这可能会也可能不会解决您的问题,但我想我会发布以防万一。
【讨论】:
是的,在这种情况下,“Turn-It-Off-And-On-Again”似乎是解决问题的正确途径。 这可行,但我不认为它是正确的答案。我想一劳永逸地修复它,而不必重新启动 VS。 现在每次迁移后都会发生这种情况,并且需要完全重启 PC 才能工作。 我已经尝试了所有建议的解决方案。它们似乎都无法永久解决问题。我必须不断重启 Visual Studio。 这是 Github 中的一个未解决问题 github.com/aspnet/EntityFramework6/issues/382【参考方案2】:这个问题的根本原因来自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 Professioal 我也应该这样做。我多次收到此错误? 我在 IDE(社区版)下没有 MSBuild 文件夹,我从“C:\Program Files (x86)\Microsoft Visual Studio\2017\Community”复制了我的 MSBuild,但它没有解决任何问题。 我使用的是 2017 Pro,这为我解决了这个问题。 +1 请注意,如果您在进行此修复后更新 VS2017,您可能需要再次更新 devenv.exe.config 这个答案再次帮助了我 - 更新 VS2017 后,您需要再次执行此操作,正如 @MikePeterson 所说。【参考方案3】:我们遇到了这个问题,下面是我们需要做的事情:
问题是我们配置了一个名为HttpRuntime.Cache["somekey"
] 的数据库命令拦截器(IDbCommandInterceptor)
,由于某种原因,迁移命令因此无法运行。消除这种依赖后,所有命令都运行完美。也许HttpRuntime
找不到构建框架 dll?
所以当迁移命令失败时检查整个callstack,看看是否有类似的问题。
【讨论】:
非常有趣,我的堆栈跟踪包括对使用 HttpContext.Current 的方法的调用。删除此问题即可解决问题。【参考方案4】:我找到了一种似乎可以彻底解决问题的解决方法,至少在我运行 VS 2017 Professional 15.5.2 和 Entity Framework 6.1.1 的环境中是这样。
基本上,将 DLL(以及一些相关的)安装到 GAC(全局程序集缓存)中,问题就会消失。
按照以下步骤操作:
关闭所有正在运行的 Visual Studio 2017 实例
启动 Visual Studio 2017 开发人员命令提示符
键入以下命令(将 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"
-
重启 Visual Studio 2017
本质上,当 .NET 尝试加载 DLL 时,GAC 将(在大多数情况下)优先,并且 FileNotFoundException 将消失,因为您的 DLL 现在将通过 GAC 解析。
再次,它对我有用,它只是一种解决方法,它本身不会解决核心问题,但至少我在尝试使用 EF 迁移时不必一直重启 VS,这就足够了对我来说。
【讨论】:
也为我工作。 Visual Studio 2017 Developer Command Prompt 位于 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2017\Visual Studio Tools 中,必须以管理员身份运行。 仅供参考 - 当 microsoft 升级产品并且 GAC 条目变得无效(较新版本,或路径更改 .. pro 与企业等)时,这可能会导致问题。升级到最新的 15.8.0 时出现明显问题如果您的项目未加载(由于使用了此解决方案),请参见此处:developercommunity.visualstudio.com/content/problem/311136/…【参考方案5】:以防万一重新启动 Visual Studio 不起作用转到任务管理器/进程资源管理器和技能 VBCSCompiler.exe
建议使用Process Explorer
【讨论】:
我正在尝试这个解决方案“以防万一重新启动 Visual Studio 不起作用转到任务管理器/进程资源管理器和技能 VBCSCompiler.exe”并且工作正常。【参考方案6】:我丢失的文件或程序集版本与问题不同。
当我尝试发布我的 ASP.net 项目时出现此错误
Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
我通过安装Microsoft Build Tools 2015解决了这个问题
我认为我的问题是因为我在 VS 2017 中发布了使用 VS 2015 构建的项目。希望可以帮助其他有同样问题的人。
【讨论】:
这帮助我修复了本地 TFS 中的 CI 构建。我的一个构建服务器没有这些工具,并且由于非常相似的问题而一直失败。 这对我来说是个问题。我有 v15,它想要 v14【参考方案7】:关闭和重新打开Visual Studio 就像一个魅力!
【讨论】:
不幸的是不适合我【参考方案8】:感谢那些已经发布的人。我的情况是通过上述的组合解决的。我有几个版本的 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>
【讨论】:
你的例子好像消失了。【参考方案9】:我在 macOS 上更新 XCode/Mono 组件时遇到了同样的问题。
解决方案是将 Visual Studio for Mac 更新到最新版本。
我认为这个问题是使用 .NET Core 3.0 包中的新 MSBuild 工具引起的,该包安装了新的 XCode/Mono 版本。
【讨论】:
【参考方案10】:就我而言,某些东西(可能是 NuGet 更新)确实将 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>
删除依赖的Assemby-Entry 后,我可以再次发布项目。
【讨论】:
【参考方案11】:我们的本地构建脚本使用旧版本的 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。 在我的 TeamCity 上从 4.3.0 升级到 5.6。这解决了我的问题。谢谢! 就是这样。非常感谢!从 4.4.1 到 5.4.0。 @ElderSmash 我们也在使用 Azure DevOps 构建。在我们的例子中,通过将 NuGet 安装程序步骤从NuGetToolInstaller@0
更新到 NuGetToolInstaller@1
解决了问题,即使没有指定更新的版本。但不确定,这是否解决了问题的根本原因,或者修复只是清除本地缓存的副作用。
@ElderSmash 这正是我的问题和解决方案,谢谢!【参考方案12】:
这对我有用 - 似乎是从 2020 年开始的非支持问题。
在Azure Build Pipeline
> NuGet tool installer
步骤中,将Version of NuGet.exe to install
更改为较新的版本,例如5.4.0
。在https://dist.nuget.org/tools.json查看版本。
问题消失,现在构建成功。
【讨论】:
更新使用的 nuget 版本也是为我解决问题的方法。【参考方案13】:这对我有用: 当我执行 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
【讨论】:
【参考方案14】:使用 Visual Studio 2019 社区版。我尝试了其他解决方案,但运气不佳,但在清除我的 NuGet 缓存后,问题似乎得到了解决。
【讨论】:
【参考方案15】:在尝试了上述所有方法和更多方法后 - 运行 WCF
应用程序对我来说仍然失败。错误:Could not load file or assembly 'Microsoft.Build.Framework, Version=15.1.0.0
..
注意:尝试重启VS、PC、杀死进程、清理VS缓存、nuget缓存、obj、bin、.vs、packages文件夹
对我有用的是删除项目的*.csproj.user
文件。显然它有一些过时的配置。花了 4 个小时试图弄清楚..
【讨论】:
【参考方案16】:我重新启动,然后我发现我一直在运行的本地 Web 服务被另一个占用该端口的进程阻止。我检查了正在运行的进程并使用TCPView 终止了该进程,一切似乎又开始工作了。
【讨论】:
【参考方案17】:我在我的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>
【讨论】:
【参考方案18】:调用“MSBuildLocator.RegisterDefaults();”在访问 DLL 之前为我工作。
【讨论】:
【参考方案19】:问题:无法加载文件或程序集 'Microsoft.Build.Framework...
解决方案:我的项目中引用了 Microsoft.Build.Framework Nuget 包,并将此 NuGet 包的 Copy Local 的引用设置为 True,问题已为我解决。
【讨论】:
以上是关于无法加载文件或程序集“Microsoft.Build.Framework”(VS 2017)的主要内容,如果未能解决你的问题,请参考以下文章
无法加载文件或程序集 'PayPalAdaptivePaymentsSDK,版本 = 2.12.117.0
无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配
无法加载文件或程序集'netstandard,版本 = 2.0.0.0