【问题标题】:Blazor Webassembly error when adding a ASP.NET Core Web API Project Reference添加 ASP.NET Core Web API 项目参考时出现 Blazor Webassembly 错误
【发布时间】:2021-09-30 14:21:36
【问题描述】:

我创建了两个全新的项目,即 Blazor Web 程序集,但没有选中 ASP.NET Core 托管 选项,因为我不想创建另外两个已创建的项目。随后是一个全新的 ASP.NET Core Web API 项目。创建此项目并编写任何代码后,我将一些 nuget 包添加到我计划使用的 web api 项目中。然后我展开 Blazor Web Assembly 项目并右键单击 Dependencies,单击 Add Project Reference 并选择我的 Web API 项目。然后在构建这两个项目时,web api 通过并且 blazor web 程序集由于Error NETSDK1082 而失败。确切的错误如下所示。

C:\Program Files\dotnet\sdk\6.0.100-preview.3.21202.5\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(391,5):错误 NETSDK1082 : 没有可用于指定 RuntimeIdentifier 'browser-wasm' 的 Microsoft.AspNetCore.App 运行时包。

我在网上查找了该错误并尝试了在<PropertyGroup> 部分之间将两行代码添加到我的.csproj 文件中的解决方案,但即使在添加后它也失败了。我什至删除了 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 包?

【问题讨论】:

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


    【解决方案1】:

    更新: 您似乎正在尝试向 blazor Web 程序集 (WA) 项目添加对 Web API 的引用。你不需要这样做。有两种 WA 模型:

    1. .net core hosts:创建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

    【讨论】:

    • 我明白了,我想即使是预装的标准 web api nuget 包也不兼容,因为我刚刚创建了相同的两个项目,但这次没有添加任何 nuget 包,只是添加了 web api 项目作为 blazor Web 程序集中的项目引用。但是我找到了project.assets.json 文件并搜索了browser-asm 我看到了一个名为net5.0/browser-wasm 的部分,它从1797 到3600 行开始。是不是那个超长的部分我必须一个个卸载所有这些nuget 包?跨度>
    • 我还看到两个部分在原始帖子中显示以下内容。请也检查一下。
    • 您似乎有两个不同的目标(.net5 和 .net6)。你能在其中任何一个上做一个干净的开始,看看它是否有效?
    • 我刚刚创建了一个全新的 blazor Web 程序集,并确保目标框架是 .NET 5.0(当前)并且只选择了 HTTPS 配置。然后在相同的解决方案下,我添加了一个目标框架为 .NET 5.0(当前)的 ASP.NET Core Web API,选择了为 HTTPS 配置并单击启用 OpenAPI 支持。然后我单独构建它们并单独运行它们。 blazor wa 是在 IIS express 上运行的。然后我将 web api 作为 IIS Express 运行,效果也很好。
    • 这一次,我也没有为这些项目集添加任何 nuget 包。在 blazor wa 上单独运行它们后,我右键单击 -> 添加 -> 项目引用 -> 选择的 WebApi。然后右键单击解决方案(2 个项目)-> 设置启动项目-> 确保为两个项目选择了“开始”。点击播放按钮,但我得到相同的错误 NETSDK1082。但是,如果两个项目都是使用 .NET 5.0 选择的,那么两个不同的目标又如何呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2020-10-12
    • 2022-07-28
    • 2020-08-24
    相关资源
    最近更新 更多