由于 System.Runtime 错误,无法将 Blazor 应用程序迁移到 .Net 5
Cannot Migrate Blazor App to .Net 5 Due to System.Runtime Error
我一直在学习 Udemy 中的一个很棒的教程,以了解有关 Blazor 的更多信息 (https://www.udemy.com/course/programming-in-blazor-aspnet-core/),但我遇到了一个绊脚石,我不确定该怎么做。
精简版
从 .Net Standard 2.1 升级到 .Net 5 时,我在尝试 运行 这个示例 Blazor 应用程序加载时遇到了这个错误(所以它没有命中我的任何代码): System.TypeLoadException: Could not resolve type with token 01000014 from typeref (expected class 'System.Threading.Tasks.Task' in assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
我看到 this SO link 也有类似的问题,但它并没有给我太多帮助。
详细版
对于以前版本的 .Net,您安装了最新版本,然后 Visual Studio 选择了它,切换了项目,然后就离开了 - 一切都是无缝的,并且可以正常工作。尽管有一些较新的东西,Microsoft 的消息传递一直非常混乱,我现在遇到的问题是在 Udemy 教程中,我需要利用 IJSObjectReference
界面来做一些事情。当我第一次将其添加到代码中时,无法解析类型引用,因此快速搜索指出我需要通过更改以下内容将项目移动到 .Net 5:
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
对此(因为 Visual Studio 并不总是将 .Net 5 显示为一个选项):
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
看起来很简单,所以我将 Client Blazor 项目更改为此并尝试编译。这给了我这个错误:Project BlazorMovies.Client is not compatible with netcoreapp3.1 (.NETCoreApp,Version=v3.1). Project BlazorMovies.Client supports: net5.0 (.NETCoreApp,Version=v5.0)
。我想好吧,接下来我会将服务器升级到 5.0,然后一切都可以正常编译,但是一旦我将其拉起,我就会收到此错误:System.TypeLoadException: Could not resolve type with token 01000014 from typeref (expected class 'System.Threading.Tasks.Task' in assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
。然后我记起来不记得我是否已经安装了 .Net 5,所以我去检查并(通过 docs.microsoft.com) I only have 4.8.03752 installed. I then did some searches to try and find the .Net installers and there were multiple (see here)- 甚至页面的布局也确实让人不知所措,大约 20 个安装链接分散在各处。我知道我至少需要 x64,所以我首先安装了 SDK,因为它说 Visual Studio 支持并且比我预期的要快得多(基于之前安装的 .Net),但现在 VS 显示 .Net 5看起来很有希望!不过,我重新检查了注册表,它仍然显示 4.8.03752,当我转到 Add/Remove 程序时,.Net 5 没有像所有其他版本那样显示。我接下来安装了 Hosting Bundle,它说它是成功的,但示例应用程序仍然有完全相同的错误。
有什么建议吗?我知道 Blazor 很新,但是微软在 .Net Framework、.Net Standard、.Net Core 和现在迁移回 .Net 5 之间的消息传递极其混乱,似乎需要多个安装程序,我真的不知道该去哪里下一个。根据堆栈跟踪,该错误完全是从 Web Assembly 代码内部生成的,因此它似乎与我正在做的事情没有任何关系。这是 Chrome 在控制台中向我显示的所有内容的屏幕截图:
您是否也更改了 *.csproj 中的 header 节点?
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
...
</Project>
要将 Blazor Webassembly 应用程序从 netstandard2.1
迁移到 .NET 5
,您可以参考以下步骤:
Install or update Visual Studio 2019 to version 16.8.0+, and install the .NET 5 SDK.
更改 Blazor Webassembly 项目设置。
创建一个Blazor Webassembly项目(创建应用时,select .net core 3.1,那么TargetFrameWork会是.netstandard2.1
),打开应用.csproj文件:
- 将 SDK 从
Microsoft.NET.Sdk.Web
更新为 Microsoft.NET.Sdk.BlazorWebAssembly
- 将 TargetFramework 设置为
net5.0
- 如果你有它,请删除对
Microsoft.AspNetCore.Components.WebAssembly.Build
的包引用。
更新后.csproj文件内容如下:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="3.2.1" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="3.2.1" PrivateAssets="all" />
<PackageReference Include="System.Net.Http.Json" Version="3.2.0" />
</ItemGroup>
</Project>
更新 Nuget 依赖项版本。
结果是这样的:
那么,最终的.csproj文件内容如下:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.2" PrivateAssets="all" />
<PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
</ItemGroup>
</Project>
清理整个解决方案,否则构建引擎将无法使用更新的框架重新生成所有必需的文件。
然后运行申请,网站运行良好。
我一直在学习 Udemy 中的一个很棒的教程,以了解有关 Blazor 的更多信息 (https://www.udemy.com/course/programming-in-blazor-aspnet-core/),但我遇到了一个绊脚石,我不确定该怎么做。
精简版
从 .Net Standard 2.1 升级到 .Net 5 时,我在尝试 运行 这个示例 Blazor 应用程序加载时遇到了这个错误(所以它没有命中我的任何代码): System.TypeLoadException: Could not resolve type with token 01000014 from typeref (expected class 'System.Threading.Tasks.Task' in assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
我看到 this SO link 也有类似的问题,但它并没有给我太多帮助。
详细版
对于以前版本的 .Net,您安装了最新版本,然后 Visual Studio 选择了它,切换了项目,然后就离开了 - 一切都是无缝的,并且可以正常工作。尽管有一些较新的东西,Microsoft 的消息传递一直非常混乱,我现在遇到的问题是在 Udemy 教程中,我需要利用 IJSObjectReference
界面来做一些事情。当我第一次将其添加到代码中时,无法解析类型引用,因此快速搜索指出我需要通过更改以下内容将项目移动到 .Net 5:
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
对此(因为 Visual Studio 并不总是将 .Net 5 显示为一个选项):
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
看起来很简单,所以我将 Client Blazor 项目更改为此并尝试编译。这给了我这个错误:Project BlazorMovies.Client is not compatible with netcoreapp3.1 (.NETCoreApp,Version=v3.1). Project BlazorMovies.Client supports: net5.0 (.NETCoreApp,Version=v5.0)
。我想好吧,接下来我会将服务器升级到 5.0,然后一切都可以正常编译,但是一旦我将其拉起,我就会收到此错误:System.TypeLoadException: Could not resolve type with token 01000014 from typeref (expected class 'System.Threading.Tasks.Task' in assembly 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
。然后我记起来不记得我是否已经安装了 .Net 5,所以我去检查并(通过 docs.microsoft.com) I only have 4.8.03752 installed. I then did some searches to try and find the .Net installers and there were multiple (see here)- 甚至页面的布局也确实让人不知所措,大约 20 个安装链接分散在各处。我知道我至少需要 x64,所以我首先安装了 SDK,因为它说 Visual Studio 支持并且比我预期的要快得多(基于之前安装的 .Net),但现在 VS 显示 .Net 5看起来很有希望!不过,我重新检查了注册表,它仍然显示 4.8.03752,当我转到 Add/Remove 程序时,.Net 5 没有像所有其他版本那样显示。我接下来安装了 Hosting Bundle,它说它是成功的,但示例应用程序仍然有完全相同的错误。
有什么建议吗?我知道 Blazor 很新,但是微软在 .Net Framework、.Net Standard、.Net Core 和现在迁移回 .Net 5 之间的消息传递极其混乱,似乎需要多个安装程序,我真的不知道该去哪里下一个。根据堆栈跟踪,该错误完全是从 Web Assembly 代码内部生成的,因此它似乎与我正在做的事情没有任何关系。这是 Chrome 在控制台中向我显示的所有内容的屏幕截图:
您是否也更改了 *.csproj 中的 header 节点?
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
...
</Project>
要将 Blazor Webassembly 应用程序从 netstandard2.1
迁移到 .NET 5
,您可以参考以下步骤:
Install or update Visual Studio 2019 to version 16.8.0+, and install the .NET 5 SDK.
更改 Blazor Webassembly 项目设置。
创建一个Blazor Webassembly项目(创建应用时,select .net core 3.1,那么TargetFrameWork会是
.netstandard2.1
),打开应用.csproj文件:- 将 SDK 从
Microsoft.NET.Sdk.Web
更新为Microsoft.NET.Sdk.BlazorWebAssembly
- 将 TargetFramework 设置为
net5.0
- 如果你有它,请删除对
Microsoft.AspNetCore.Components.WebAssembly.Build
的包引用。
更新后.csproj文件内容如下:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="3.2.1" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="3.2.1" PrivateAssets="all" /> <PackageReference Include="System.Net.Http.Json" Version="3.2.0" /> </ItemGroup> </Project>
- 将 SDK 从
更新 Nuget 依赖项版本。
结果是这样的:
那么,最终的.csproj文件内容如下:
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.2" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.2" PrivateAssets="all" /> <PackageReference Include="System.Net.Http.Json" Version="5.0.0" /> </ItemGroup> </Project>
清理整个解决方案,否则构建引擎将无法使用更新的框架重新生成所有必需的文件。
然后运行申请,网站运行良好。