C# 由于系统运行时错误,无法将Blazor应用迁移到.Net 5

C# 由于系统运行时错误,无法将Blazor应用迁移到.Net 5,c#,asp.net-core,blazor,blazor-webassembly,C#,Asp.net Core,Blazor,Blazor Webassembly,我一直在通过Udemy中的一个很棒的教程来学习更多关于Blazor()的知识,但是遇到了一个绊脚石,我不知道该怎么办 短版 当从.Net Standard 2.1升级到.Net 5时,我在加载此示例Blazor应用程序后尝试运行该应用程序时遇到了此错误(因此它没有命中我的任何代码):System.TypeLoadException:无法从typeref解析带有标记01000014的类型(预期类'System.Threading.Tasks.Task'in assembly'System.Runt

我一直在通过Udemy中的一个很棒的教程来学习更多关于Blazor()的知识,但是遇到了一个绊脚石,我不知道该怎么办

短版

当从.Net Standard 2.1升级到.Net 5时,我在加载此示例Blazor应用程序后尝试运行该应用程序时遇到了此错误(因此它没有命中我的任何代码):
System.TypeLoadException:无法从typeref解析带有标记01000014的类型(预期类'System.Threading.Tasks.Task'in assembly'System.Runtime,版本=5.0.0.0,区域性=neutral,PublicKeyToken=b03f5f7f11d50a3a')
我看到了类似的问题,但它并没有给我太多的帮助

详细版本

在早期版本的.Net中,您安装了最新版本,然后Visual Studio选择了最新版本,您切换了项目,然后离开了-一切都是无缝的,只是正常工作。但是,对于一些更新的内容,Microsoft的消息传递非常混乱,我现在遇到的问题是我的教程中我需要利用<代码>IJSObjectReference接口执行某些操作。当我第一次将其添加到代码中时,无法解析类型引用,因此快速搜索指出我需要通过更改此选项将项目移动到.Net 5:

<PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>

netstandard2.1
对此(因为Visual Studio并不总是显示.Net 5作为选项):


net5.0
似乎很简单,所以我将客户端Blazor项目更改为此并尝试编译。这给了我以下错误:
project BlazorMovies。客户端与netcoreapp3.1(.NETCoreApp,版本=v3.1)不兼容。project BlazorMovies。客户端支持:net5.0(.NETCoreApp,版本=v5.0)
。我想好了,接下来我会将服务器升级到5.0,然后一切都会正常编译,但一旦我启动它,就会出现以下错误:
System.TypeLoadException:无法从typeref解析带有标记01000014的类型(预期类'System.Threading.Tasks.Task'in assembly'System.Runtime,版本=5.0.0.0,区域性=neutral,PublicKeyToken=b03f5f7f11d50a3a')
。然后我记得如果我已经安装了.Net 5,我没有回忆,所以我去检查并(通过)我只安装了4.8.03752。然后我进行了一些搜索,试图找到.Net安装程序,但有多个(请参阅)-即使是页面的布局也非常复杂,大约有20个安装链接分散在各处。我知道我至少需要x64,所以我首先安装了SDK,因为它表示支持Visual Studio,而且速度比我预期的要快得多(基于以前安装的.Net),但现在VS显示的是.Net 5,这似乎很有希望!不过我重新检查了注册表,它仍然显示为4.8.03752,当我去添加/删除程序时,.Net 5没有像所有其他版本一样显示。我接下来安装了主机包,它说它成功了,但示例应用程序仍然有完全相同的错误


有什么建议吗?我知道Blazor很新,但由于Microsoft在.Net Framework、.Net Standard、.Net Core和现在迁移回.Net 5之间的消息非常混乱,似乎需要多个安装程序,我真的不知道下一步该怎么做。根据堆栈t,该错误完全是在Web汇编代码中生成的这是Chrome在控制台中显示给我的所有内容的屏幕截图:

您是否也更改了*.csproj中的标题节点

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

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

  ...

</Project>

net5.0
...

您是否也更改了*.csproj中的标题节点

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

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

  ...

</Project>

net5.0
...

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

  • Visual Studio 2019升级到版本16.8.0+,并安装

  • 更改Blazor Webassembly项目设置

    创建Blazor Webassembly项目(创建应用程序时,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>
    
     <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>
    
    
    net5.0
    
  • 更新Nuget dependencies版本

    结果如下:

    然后,最终的.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>
    
     <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>
    
    
    net5.0
    
  • 清理整个解决方案,否则构建引擎将无法使用更新的框架重新生成所有必需的文件

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


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

  • Visual Studio 2019升级到版本16.8.0+,并安装

  • 更改Blazor Webassembly项目设置

    创建Blazor Webassembly项目(创建应用程序时,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>
    
     <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>
    
    
    net5.0
    
  • 更新Nuget dependencies版本

    Th