添加 ASP.NET Core Web API 项目参考时出现 Blazor Webassembly 错误

Blazor Webassembly error when adding a ASP.NET Core Web API Project Reference

我在 Blazor Web Assembly 中创建了两个新项目,但没有选中 ASP.NET Core hosted 选项,因为我不想创建其他两个项目创建。接下来是一个全新的 ASP.NET Core Web API 项目。创建此项目并编写任何代码后,我将一些 nuget 包添加到我计划使用的 web api 项目中。然后我展开 Blazor Web Assembly 项目并右键单击依赖项,单击添加项目引用并选择我的 Web API 项目。然后在构建这两个项目时,web api 通过并且 blazor web assembly 由于 Error NETSDK1082 而失败。具体错误如下所示。

C:\Program Files\dotnet\sdk.0.100-preview.3.21202.5\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(391,5): error NETSDK1082: There was no runtime pack for Microsoft.AspNetCore.App available for the specified RuntimeIdentifier 'browser-wasm'.

我在网上查找了该错误并尝试了解决方案,我在我的 .csproj 文件中的 <PropertyGroup> 部分之间添加了两行代码,但即使添加了它也失败了。我什至删除了 obj 文件夹并重建了 blazor 项目,但它产生了同样的错误。

<RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
<UseBlazorWebAssembly>true</UseBlazorWebAssembly>

Blazor Web Assembly Project:

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

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

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.10" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.10" PrivateAssets="all" />
    <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\PolkWebAPI\PolkWebAPI.csproj" />
  </ItemGroup>

</Project>

ASP.NET Core Web API Project:

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

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

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.10" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.10">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.2" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
  </ItemGroup>

</Project>

我没有向任何项目添加任何代码我只是将一些 nuget 包安装到 Web api 项目并添加了对生成的 blazor Web 程序集的项目引用错误。

跟进请求:

project.assets.json 文件中,我看到另外两个部分包括 browser-wasm:

 "downloadDependencies": [
      {
        "name": "Microsoft.NETCore.App.Runtime.browser-wasm",
        "version": "[5.0.4, 5.0.4]"
      }
    ],
    "frameworkReferences": {
      "Microsoft.NETCore.App": {
        "privateAssets": "all"
      }
    },
    "runtimeIdentifierGraphPath": "C:\Program Files\dotnet\sdk\6.0.100-preview.3.21202.5\RuntimeIdentifierGraph.json"
  }
},
"runtimes": {
  "browser-wasm": {
    "#import": []
  }
}

你说的是手动卸载每个 nuget 包的哪个部分?

更新: 您似乎试图将对 Web API 的引用添加到 blazor web assembly (WA) 项目。你不需要那样做。 WA模型有两种:

  1. .net core hosted:创建WA项目时勾选“.net core”hosted即可创建此类项目。它默认创建三个项目。客户端、服务器(主要是 API 控制器)和共享。客户端和服务器都引用共享项目。共享项目具有服务器中 WA 应用程序和控制器的所有 类。
  2. 独立:在这种情况下,您将获得两个项目。请注意,您可以像上面的 (1) 中那样添加另一个共享项目,以使用两者都可以使用的 类。但是,在这种情况下,API 控制器甚至不需要知道它正在与 blazor 应用程序通信。

您看到 'browser-wasm' 错误是因为 nuget 包与 blazor wasm 不兼容。您收到错误是因为您添加了对 WA 项目的服务器项目引用。

阅读更多here

如果完全选择 (1) 或 (2) 不起作用,请在项目文件夹中搜索 project.assets.json 并使用 browser-wasm 搜索该部分。检查该部分中的软件包列表,然后尝试一个一个地卸载这些 nuget 软件包。

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