【BUG】.NET项目|未能加载文件或程序集“xxx”,或它的某一个依赖项。系统找不到指定的文件的通解
出错代码:
MSBuildWorkspace workspace = CreateWorkspace();
Solution solution = workspace.OpenSolutionAsync(solutionPath).Result;
在OpenSolutionAsync(solutionPath).Result
获取Result的时候一直报错,称未能加载文件或程序集。
但是我系统的.NET
、visual studio
、nuget
等均已经是最高版本。
而且单独打开solutionPath
对应的.sln
工程文件时都能正常编译生成。
偏偏这行报错。
实际上,这个报错还是因为.NET
、MSbuild
版本过低。低版本不兼容高版本的库。
第一步
你的系统中需要有更高版本的.NET
、visual studio
、nuget
。
安装NET 6.0
注:现在(2022年6月3日)已经有NET 7.0 preview了,但没有stable,也可以装NET 7.0。
点击下载:下载 .NET 6.0 (Linux、macOS 和 Windows)。
安装最新版Visual Studio
注:现在最新版是VS 2022。
点击进入官网的安装教程:安装 Visual Studio。
更新nuget
运行如下指令:
nuget update -self
注:若上述指令提示称未安装nuget,请先安装。
点击进入NuGet下载页:Available NuGet Distribution Versions。
第二步
更新目标框架
先右键项目,选择项目属性,设置Target Framework(目标框架),改成最新版.NET Framework
或者最新版.NET Core
的框架(就是你当前使用的版本)。
更改完成后,重新编译一次,保证当前修改不影响代码编译,并确定代码能够用于新的框架。
更新项目依赖
右键出错的项目,点击管理NuGet程序包。
然后更新所有依赖:
注意:若你的目标框架未修改,更新将不会成功。
更新依赖后,重新运行代码,就不会出现找不到程序集的报错了。
第三步
倘若一切都是最新版,仍然找不到程序集,这说明你的项目缺少对这个程序集的引用,但又确实用到了该程序集。
这种情况,在NuGet中安装该程序集,即可解决问题。
例如报错未能加载文件或程序集System.IO.FileNotFoundException:“未能加载文件或程序集“System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。
。
注:安装时需确保程序集的依赖项符合当前项目的版本。
第四步
倘若第三步找不到报错提到的程序集、或者已经安装了最新版但仍然提示旧版的报错,可考虑引用顺序,或是否安装错了一个程序集。
这一类的典型:
{"未能从程序集“Microsoft.Build.Framework, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中加载类型“Microsoft.Build.Framework.IMetadataContainer”。":"Microsoft.Build.Framework.IMetadataContainer"}
已知Microsoft.Build.Framework
已经安装了17.2.0
,可报错提示说15.1.0.0
中有东西找不到。
即使将using Microsoft.Build.Framework;
这行注释掉,报错提示还是不变
——这是因为,其他的程序集中也有Microsoft.Build.Framework
,它们的版本过低,并且比Microsoft.Build.Framework
先一步被引用。
可以调整using
顺序,也可以安装最新版Microsoft.Build
,直接解决这个问题。
注:
Microsoft.Build.Framework
属于Microsoft.Build
,但在NuGet中被作为两个包发布,假设已经安装Microsoft.Build
,就不需要再安装Microsoft.Build.Framework
。
总结
微软系列的东西最好是全部向最新版看齐。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)