针对指定的运行时标识符'browser-wasm',Microsoft.AspNetCore.App没有可用的运行时包。

59

尝试使用Microsoft提供的指南将ASP.NET Core 3.1迁移到5.0。

安装了运行时为5.0.100-rc.1的SDK。按照指南更新项目,但仍然出现以下错误:

There was no runtime pack for Microsoft.AspNetCore.App available for the specified RuntimeIdentifier 'browser-wasm'

项目文件:

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

找不到与这个错误相关的任何内容。我不知道该在哪里搜索更多信息。

谢谢任何想法。


1
你使用的是哪个Visual Studio?应该是最新的预览版。 - H H
错误信息似乎是发布错误,您在发布到IIS时是否犯了这个错误?如果是的话,这似乎是GitHub上的一个已知问题,请检查并更新到最新版本的.NET 5。 - Rena
是的,我按照上面链接的指南进行了操作。 - Patrick Szalapski
1
你尝试删除 objbin.vs 文件夹了吗? - agua from mars
刚刚完成了,没有任何更改。 - Patrick Szalapski
显示剩余12条评论
13个回答

35

我终于让它工作了。

我按照指南里的所有步骤都做了,除了项目文件,我把它改成了这样:

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

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <UserSecretsId>*****</UserSecretsId>
    <UseBlazorWebAssembly>true</UseBlazorWebAssembly>
  </PropertyGroup>
...

但是我不知道 官方升级指南说要使用什么:

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

改为:

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

按照您的建议更改了我的项目文件,并将UseBlazorWebAssembly设置为true后,客户端项目已经构建成功。但是当我运行其服务器项目时,出现了“应用程序启动异常:System.TypeLoadException:程序集'Microsoft.CodeAnalysis.CSharp, Version=3.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'中类型'Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions'的方法'FilterDiagnostic'没有实现。”的错误提示。 - Patrick Szalapski
我在重大变更中没有看到关于FilterDiagnosticUseEndpoints的任何内容。 - Patrick Szalapski
@PatrickSzalapski 我正在使用Blazor Server,因此我的解决方案中只有一个项目。不知道如何帮助你。尝试关注下面Richard的答案。 - Kasta
是的 - 我也一样。 - Sean Kearon
同样适用于我 - jazb

14

我遇到了相同的问题,最终解决了。以下是方法。

在我的情况下,错误不是由 Blazor 项目 自身引起的,而是由同一解决方案中的一个 引用项目 引起的。被引用的项目针对 .NET Standard 2.1,这本身应该没什么问题; 然而,它还安装了一些 NuGet 包,可能会与 Blazor 依赖项产生冲突:(Microsoft.Extensions.*)。

Solution
- Project A (.net standard 2.1 - Class library)
  - Dependencies
    - Packages
      - Microsoft.Extensions.Configuration.Json (<-- example dependency)
- Project B (.net 5 - Blazor webassembly)
  - Dependencies
    - Projects
      - Project A (<-- caused the error, presumably because of the above dependency)

.NET 5RC的博客文章提到,在Blazor项目中,所有Microsoft.Extensions.*包都应该更新到5.0.0-rc.1.*。

通过删除我不需要的项目依赖项(但不小心放置在那里)来解决了这个问题。

我不理解的是为什么“dotnet build”没有给出一个清晰的有关冲突的错误消息,而是提到了Blazor项目的运行时标识符的模糊消息。

希望这也能帮助其他人。


1
具体是哪些扩展名?Blazor客户端使用的扩展与服务器端ASP.NET Core使用的扩展非常不同。如果ProjectA使用了“abstractions”包,则不应该有任何问题。 - Panagiotis Kanavos
1
顺便提一下,.NET 5不再使用.NET Standard来实现跨平台共享代码。.NET 5目标(net5.0跨平台的目标,而net5.0-ios14.0则是特定的运行时。为了兼容性,支持.NET Standard 2.1,但不再作为跨平台目标。 - Panagiotis Kanavos
我将解决方案中的所有四个项目更新到 net5.0,但仍然遇到相同的错误。在您的示例中,您认为 Microsoft.Extensions.Configuration.Json 包存在冲突。您有什么想法可以帮助我找出可能存在冲突的间接依赖项? - Patrick Szalapski
老实说,不太清楚。我想只能老老实实地通过试错来尝试解决问题了。(创建一个具有相同依赖项的新(空)项目,并将该项目从您的 Blazor 项目中引用。然后逐个删除依赖项,直到构建成功。) - Richard
我尝试使用Blazor WASM + gRPC服务器,当我在Blazor项目中添加gRPC服务时,遇到了这个问题。为了解决这个问题,我按照这个答案的方法从项目中删除了重复的依赖项(Grpc.AspNetCore,在Blazor项目中自动添加),然后一切都正常工作了。 - cHida

11

在我的情况下,我引用了一个引用数据层类的项目,因此不适用于Blazor客户端或“browser-wasm”。

当我从客户端解决方案中删除了引用 > 依赖项 > 项目,我的解决方案就编译成功了。


8

我遇到了同样的问题,并在这篇帖子下向微软提出了问题:

https://github.com/dotnet/aspnetcore/issues/27738

您需要更新您的项目以使用以下 SDK:

Client - Microsoft.NET.Sdk.BlazorWebAssembly
Server - Microsoft.NET.Sdk.Web
Shared - Microsoft.NET.Sdk

6

我在更新NuGet包并向错误的项目添加不正确的包后遇到了同样的问题。 我有一个名为Project.Application.csproj的库:

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

在这个项目中,我有一个包:
<PackageReference Include="FluentValidation" Version="10.4.0" />

我不小心添加了额外的包:

<PackageReference Include="FluentValidation.AspNetCore" Version="10.4.0" />

之后我的代码就崩溃了。

看起来 FluentValidation.AspNetCore 不兼容 Blazor 客户端项目 - Microsoft.NET.Sdk.BlazorWebAssembly,这些项目引用了库 Project.Application.csproj,因此请注意在 Blazor 项目中所有被引用的项目,确保它们不包含不兼容的软件包。


我也曾经做过同样的事情。我试图使用FluentValidation升级我的项目,因为我正在使用Blazored.FluentValidation,而它已经不再兼容最新的MC框架/运行时。结果安装了错误的FluentValidation.AspNetCore。 - ransems
我在添加了一些Serilog包并删除了一些较旧的包之后解决了这个问题。 - Guilder

2
在一个.NET 6.0 Blazor应用程序中,我不小心将这些内容添加到了我的共享项目而不是API项目中,导致出现了这个错误 - 纠正后问题消失了。
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="6.0.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" PrivateAssets="all" Version="6.0.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.3" />

2

感谢您的帮助,在我的情况下,我必须按照@Kasta和官方指南提到的步骤进行跟进。

我确保以下SDK更改已经就位,感谢@OzanYasinDogan提到这有所帮助。

  • 客户端 - Microsoft.NET.Sdk.BlazorWebAssembly
  • 服务器 - Microsoft.NET.Sdk.Web
  • 共享 - Microsoft.NET.Sdk

在我的情况下,我必须执行以下操作:

  • 删除 <RuntimeIdentifier>browser-wasm</RuntimeIdentifier><UseBlazorWebAssembly>true</UseBlazorWebAssembly>在此处提到
  • Blazor.Client 项目文件中删除导致冲突的版本3.xx.xx的 Microsoft.AspNetCore.Components.WebAssembly.BuildServer

1

我曾经遇到过同样的问题,我通过以下方式解决了它:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <UseBlazorWebAssembly>true</UseBlazorWebAssembly>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <AssemblyName>$(AssemblyName.Replace(' ', '_'))</AssemblyName>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.4" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.4" PrivateAssets="all" />
  </ItemGroup>

不要使用:

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

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <AssemblyName>$(AssemblyName.Replace(' ', '_'))</AssemblyName>
  </PropertyGroup> -->

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.4" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.4" PrivateAssets="all" />
  </ItemGroup> 

1
我曾遇到一个不同的错误信息:“命名空间‘Microsoft.AspNetCore.Mvc.ApplicationParts’中不存在类型或命名空间名为‘ApplicationPartAttribute’(您是否缺少程序集引用?)”。
在我的情况下,我有一个共享的助手类库,我已经开始使用 Microsoft.AspNetCore.Mvc 2.0 构建通用数据 API 存储库,并且在我的 Blazor 项目中使用了最新发布的 .Net 5。
要解决这个问题,我需要将共享类项目与通用数据 api 元素分离到一个新项目中,这样就消除了 .Net 5 Blazor 和 Microsoft.AspNetCore.Mvc 2.0 之间的链接。

1
在 BlazorWASM 应用程序引用的项目中注释掉以下包的引用后,错误消失了。
<!--<PackageReference Include="FluentValidation.AspNetCore" Version="10.3.6" />-->
        <!--<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.1" />-->
        <!--<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />-->

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接