Estou trabalhando em um projeto de montagem web Blazor com vários projetos em uma única solução. No entanto, quando tento construir a solução usando dotnet build
, recebo o seguinte erro:
erro NETSDK1082: Não havia nenhum pacote de tempo de execução para Microsoft.AspNetCore.App disponível para o RuntimeIdentifier especificado 'browser-wasm'.
Estrutura do projeto ( .sln
)
Tenho quatro projetos na minha solução:
RazorClassLibrary
(componentes compartilhados)TraningBlazorAPIProject
(API da Web do ASP.NET Core)TraningBlazorProject
(Servidor Blazor, atua como o ponto de entrada principal)TraningBlazorProject.Client
(Frontend de montagem web Blazor)
TraningBlazorProject.Client.csproj
(Montagem web Blazor):
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<RuntimeIdentifier>browser-wasm</RuntimeIdentifier>
<ImplicitUsings>enable</ImplicitUsings>
<UseBlazorWebAssembly>true</UseBlazorWebAssembly>
<Nullable>enable</Nullable>
<StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.3" />
<PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="9.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="9.0.3" />
</ItemGroup>
</Project>
TraningBlazorProject.csproj
(Servidor Blazor)
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\RazorClassLibrary\RazorClassLibrary.csproj" />
<ProjectReference Include="..\TraningBlazorProject.Client\TraningBlazorProject.Client.csproj" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.3" />
</ItemGroup>
</Project>
Detalhes do erro
TraningBlazorProject.Client falhou com 1 erro(s)
C:\Program Files\dotnet\sdk\9.0.202\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(512,5): erro NETSDK1082: Não havia nenhum pacote de tempo de execução para Microsoft.AspNetCore.App disponível para o RuntimeIdentifier especificado 'browser-wasm'.
Etapas de solução de problemas que tentei (mas não funcionaram):
Verificado
FrameworkReference
emTraningBlazorProject.Client.csproj
. Verificado queMicrosoft.AspNetCore.App
não é referenciado no projeto de montagem da web.Removido
ProjectReference
deTraningBlazorProject.csproj
paraTraningBlazorProject.Client.csproj
.Como o assembly web do Blazor não deve ser referenciado diretamente pelo servidor Blazor, eu o removi temporariamente e tentei compilar novamente, mas o erro persistiu.
Reinstalei cargas de trabalho .NET
Executadas:dotnet workload uninstall wasm-tools dotnet workload install wasm-tools dotnet workload repair
Mas ainda estou recebendo o mesmo erro.
Caches NuGet limpos e pacotes restaurados
dotnet nuget locals all --clear dotnet restore
Ainda sem sorte.
Excluiu
bin
eobj
pastas e reconstruiu o projetord /s /q bin obj dotnet clean dotnet restore dotnet build
O erro permanece.
Questões :
Por que o Blazor web assembly (browser-wasm) está tentando referenciar o
Microsoft.AspNetCore.App
, que é apenas para o servidor Blazor?Existe um conflito entre
TraningBlazorProject.Client
(Blazor WASM) eTraningBlazorProject
(servidor Blazor)?Como posso estruturar adequadamente a solução para evitar esse erro?
Fiz um teste com base na sua descrição. Primeiro, criei um aplicativo blazor wasm stand alone, e assim como você mencionou, se eu adicionasse
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="9.0.3" />
, receberia o mesmo erro que você mencionou na pergunta. Isso ocorre porqueMicrosoft.AspNetCore.Mvc.NewtonsoftJson
o pacote é uma extensão específica do ASP.NET Core que se integraNewtonsoft.Json
à estrutura MVC para aplicativos do lado do servidor. Portanto, podemos usar<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
como um substituto. Você pode ver as diferenças entre esses 2 pacotes neste caso .Então eu criei um aplicativo web .Net 9 e um projeto de biblioteca de classes. Eu adicionei o projeto blazor wasm e o projeto de biblioteca de classes como referência no aplicativo web blazor. Então eu recebo um erro
Isso é o que mencionei acima, a partir do .Net 8, não há blazor web assembly com o template hospedado asp.net core. Como substituição, temos o Blazor Web App . Ele fornece a capacidade de adicionar interatividade usando o Blazor Server ou o Blazor WebAssembly em uma base por componente. Em outras palavras, você pode aproveitar tanto o blazor wasm quanto o blazor server.