繁体   English   中英

由于 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')我看到此 SO 链接存在类似问题,但它并没有真正让我对 go 关闭。

详细版本

使用.Net 的早期版本,您安装了最新版本,然后 Visual Studio 选择了它,您切换了项目,然后就离开了 - 一切都是无缝的,并且可以正常工作。 不过,对于一些较新的东西,微软的消息传递非常混乱,我现在遇到的问题是在 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) 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 )我只安装了 4.8.03752。 然后,我进行了一些搜索以尝试找到 .Net 安装程序,并且有多个(请参见此处) - 甚至页面的布局也确实令人难以抗拒,大约 20 个安装链接分散在各处。 我知道我至少需要 x64,所以我首先安装了 SDK,因为它表示支持 Visual Studio,而且速度比我预期的要快得多(基于之前安装的.Net),但现在 VS 正在展示.Net 5,这似乎很有希望,我重新检查了注册表。 当我去添加/删除程序时,它仍然显示 4.8,03752。 .Net 5 并没有像所有其他版本一样出现,我接下来安装了 Hosting Bundle,它说它是成功的。 但示例应用程序仍然有完全相同的错误。

有什么建议吗? 我知道 Blazor 是相当新的,但是微软在.Net Framework、.Net Standard、.Net Core 之间的消息非常混乱,现在迁移回.Net 5 似乎需要多个安装程序,我真的不知道 go 在哪里下一个。 根据堆栈跟踪,该错误完全是从 Web 汇编代码中生成的,因此它似乎与我正在做的事情无关。 这是 Chrome 在控制台中向我显示的所有内容的屏幕截图: 堆栈跟踪

要将 Blazor Webassembly 应用程序从netstandard2.1迁移到.NET 5 ,您可以参考以下步骤:

  1. 安装或更新Visual Studio 2019 到版本 16.8.0+,并安装.NET 5 SDK

  2. 更改 Blazor Webassembly 项目设置。

    创建一个 Blazor Webassembly 项目(创建应用程序时, select .net core 3.1 ,然后,TargetFrameWork 将是.netstandard2.1文件:1 应用程序。

    • 将 SDK 从Microsoft.NET.Sdk.Web更新到Microsoft.NET.Sdk.BlazorWebAssembly
    • 将 TargetFramework 设置为net5.0
    • 如果你有它,请删除 package 对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>
  3. 更新 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>
  4. 清理整个解决方案,否则构建引擎将无法使用更新的框架重新生成所有必需的文件。

    然后运行应用程序,网站运行良好。

    在此处输入图像描述

您是否也更改了 *.csproj 中的 header 节点?

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  ...

</Project>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM