【问题标题】:Cannot Migrate Blazor App to .Net 5 Due to System.Runtime Error由于 System.Runtime 错误,无法将 Blazor 应用程序迁移到 .Net 5
【发布时间】:2021-04-23 04:06:12
【问题描述】:

我一直在通过 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')I看到this SO link 的类似问题,但它并没有真正让我摆脱太多。

详细版本

使用 .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)。我想好了,接下来我将 Server 升级到 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 安装程序,并且有多个(请参阅here) - 甚至页面的布局也确实令人难以抗拒,大约 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 似乎需要多个安装程序,我真的不知道该去哪里下一个。该错误完全是根据堆栈跟踪从 Web Assembly 代码中生成的,因此它似乎与我正在做的事情无关。这是 Chrome 在控制台中显示的所有内容的屏幕截图:

【问题讨论】:

    标签: c# asp.net-core blazor blazor-webassembly


    【解决方案1】:

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

    <Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
    
      <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
      ...
    
    </Project>
    

    【讨论】:

      【解决方案2】:

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

      1. Install or updateVisual Studio 2019 到版本 16.8.0+,并安装 .NET 5 SDK

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

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

      【讨论】:

      • 感谢您的详细撰写!它似乎让我更接近了,但现在我有 400 个构建错误,它们基本上都是一样的:Error MSB3030 Could not copy the file "\obj\Debug\net5.0\compressed\_framework\Microsoft.AspNetCore.Authorization.dll.gz" because it was not found.(其中很多,用于各种 .Net 5.0 Microsoft 程序集,尽管删除了“obj”文件夹,清理了解决方案,等)。
      • 我在另一个示例项目上也有另一个构建错误:Error BLAZORSDK1001 The project references the ASP.NET Core shared framework, which is not supported by Blazor WebAssembly apps. Remove the framework reference if directly referenced, or the package reference that adds the framework reference. 对于我的一生,我找不到那个引用是什么 - 我已经尝试了所有我能想到的删除它,但没有运气。
      • 为了保持进展,我尝试重新创建项目(这只是一个示例,所以没什么大不了的),但这次使用 .Net 5 并且一切正常!我只是将我的示例更改迁移到此 - 不过感谢您的帮助!绝对令人大开眼界,它需要大量的手动工作来修复。
      • @ScottSalyer 你有没有弄清楚这里的问题是什么?我将手动过程运行到(我有一个客户端、服务器和共享项目)。 VS 似乎没有发现将 .Shared 项目链接到他的 Client 项目的问题,但我得到了你在这里提到的错误?
      • @MatthewFlynn 不幸的是,没有。建立一个全新的项目为我解决了这个问题,但以前我只是在玩一个样本,所以它是更快的解决方案。对不起,我不能提供任何额外的东西!
      猜你喜欢
      • 2022-01-11
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2018-07-31
      • 2022-11-12
      相关资源
      最近更新 更多