【问题标题】:Could not load file or assembly 'System.Runtime, Version=7.0.0.0...' - After installing .NET Core 7 'dotnet watch run' not working未处理的异常。 System.IO.FileNotFoundException: 无法加载文件或程序集 \'System.Runtime, Version=7.0.0.0...\'
【发布时间】:2022-11-11 07:16:50
【问题描述】:
安装 .Net 7 后,当我使用 dotnet watch 时出现此错误:
未处理的异常。 System.IO.FileNotFoundException:无法加载
文件或程序集 'System.Runtime, Version=7.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'。系统找不到文件
指定的。文件名:'System.Runtime,版本=7.0.0.0,
文化=中性,PublicKeyToken=b03f5f7f11d50a3a' 在
System.Reflection.RuntimeAssembly.GetType(QCallAssembly 程序集,
字符串名称,布尔型 throwOnError,布尔型 ignoreCase,
ObjectHandleOnStack 类型,ObjectHandleOnStack keepAlive,
ObjectHandleOnStack assemblyLoadContext) 在
System.Reflection.RuntimeAssembly.GetType(字符串名称,布尔值
throwOnError,布尔忽略大小写)在
System.Reflection.Assembly.GetType(字符串名称,布尔 throwOnError)
在 System.StartupHookProvider.CallStartupHook(StartupHookNameOrPath
startupHook) 在 System.StartupHookProvider.ProcessStartupHooks()
我可以使用 Visual Studio 成功构建和运行项目,但无法使用dotnet cli.如何修复此错误?
【问题讨论】:
标签:
c#
.net
dotnet-cli
.net-7.0
【解决方案1】:
更改我项目的目标框架后,现在我可以使用dotnet watch run。能不能换个方式解决,不知道。
作为一种解决方法,全局.json以下可能会有所帮助:select the .NET version to use
在极少数情况下,您可能需要使用较早版本的 SDK。
您在 global.json 文件中指定该版本。 “使用最新”
政策意味着您只使用全局.json指定 .NET SDK 版本
早于最新安装的版本。
创建一个 global.json 文件并将其指向 v6 SDK。全局.json可以放置项目文件层次结构中的任何位置。
{
"sdk": {
"version": "6.0.403"
}
}
【解决方案2】:
对我来说,解决方案是将 global.json 添加到项目的根目录中。有了 SDK 版本,你就想用。
{
“SDK”:{
“版本”:“6.0.403”
}
}
对我来说 6.0.403 强制 dotnet watch 使用这个版本。
【解决方案3】:
在这里提供更多背景信息。在 dotnet 更新到 7.0 版本后,我开始使用 cli 命令解决运行时问题。特别是 dotnet watch 在来自 .sln 解决方案的项目中。
根据.NET SDK DOC here,这种行为是预期的。理想情况下,我相信应该从一开始就创建一个指向预期 SDK 版本的 global.json 文件,但事实并非如此。
如果您查看工具 > 首选项 > SDK 位置 > .NET Core(在 VS 上),您将能够看到按最新版本排序的所有可用版本。为了解决这个问题,我们要做的就是在项目中创建一个global.jsonfile,提供与项目属性中定义的相同的.net 版本。该文件如下所示:
{
"sdk": {
"version": "X.X.X"
}
}
请注意 X.X.X 应替换为项目的 .NET 版本。