簡體   English   中英

升級到 net5.0 后 Blazor WebAssembly 項目出錯

[英]Error with Blazor WebAssembly Project after upgrade to net5.0

按照此處的升級說明進行操作后;

將核心 3.1 遷移到 5.0

在我的 Blazor WebAssembly 項目上(運行為.Server 項目、.Shared 項目和.Client 項目)。

除了我在解決方案中引用另一個項目時,一切似乎都進展順利。 我希望客戶端引用.Shared 和另一個 class 庫(這在 3.1 之前使用)。 我收到以下錯誤;

錯誤 BLAZORSDK1001 該項目引用了 ASP.NET 核心共享框架,Blazor WebAssembly 應用程序不支持該框架。 如果直接引用,則刪除框架引用,或添加框架引用的 package 引用。

我的Client.csproj有以下內容;

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

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

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.6" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.6" PrivateAssets="all" />
    <PackageReference Include="blazor.extensions.logging" Version="2.0.4" />
    <PackageReference Include="Blazored.LocalStorage" Version="4.1.1" />
    <PackageReference Include="Blazorise.Bootstrap" Version="0.9.3.6" />
    <PackageReference Include="Blazorise.Components" Version="0.9.3.6" />
    <PackageReference Include="Blazorise.DataGrid" Version="0.9.3.6" />
    <PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.3.6" />
    <PackageReference Include="Blazorise.Sidebar" Version="0.9.3.6" />
    <PackageReference Include="Microsoft.AspNetCore.Components" Version="5.0.6" />
    <PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="5.0.6" />
    <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.11.1" />
    <PackageReference Include="Toolbelt.Blazor.HttpClientInterceptor" Version="9.2.1" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="wwwroot\images\" />
    <Folder Include="wwwroot\tinymce\" />
  </ItemGroup>

  <!-- When publishing, swap service-worker.published.js in place of service-worker.js -->
  <ItemGroup Condition="'$(DesignTimeBuild)' != 'true'">
    <Content Remove="wwwroot\service-worker.js" />
    <Content Update="wwwroot\service-worker.published.js" Link="wwwroot\service-worker.js" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Blazor.Shared\Blazor.Shared.csproj" />
    <ProjectReference Include="..\Core.Search\Core.Search.csproj" />
    <ProjectReference Include="..\Core\Core.csproj" />
  </ItemGroup>
  <ItemGroup>
    <Content Update="wwwroot\favicon.ico">
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
    <Content Update="wwwroot\manifest.json">
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
    <Content Update="wwwroot\service-worker.js">
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
    <Content Update="wwwroot\service-worker.published.js">
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </Content>
  </ItemGroup>
  
</Project>

和引用項目的.csproj是;

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

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

  <ItemGroup>
    <PackageReference Include="fluentvalidation.aspnetcore" Version="8.6.2" />
    <PackageReference Include="microsoft.aspnetcore.identity" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="3.1.7" />
    <PackageReference Include="microsoft.identitymodel.tokens" Version="6.7.1" />
  </ItemGroup>

</Project>

您看到的錯誤是由 fluentvalidation.aspnetcore package 引起的。 此 package 的當前版本包含對 ASP.NET 核心共享框架的引用。 FluentValidation 的某些服務器端功能需要這些引用,例如在實現驗證器攔截器時。

If you are trying to use the same validator for both your WASM client and your ASP.NET server project, and if you implement one of those features like the IValidatorInterceptor interface, then your shared validator will have to reference the fluentvalidation.aspnetcore package which Blazor will not一起工作。

與其在 Startup.cs class 中使用集成驗證,在其中向 MVC 控制器添加 fluentvalidation,不如在 Controller 操作中實例化不同的驗證器並調用 ZA8CFDE6331BD59EB2AC9Z 操作中的驗證方法問題。

此時,Blazor 客戶端驗證未集成到官方 FluentValidation package 中,而是需要使用 FluentValidation 文檔中指示的單獨包。

https://docs.fluentvalidation.net/en/latest/blazor.html

如果有人使用 Blazor,我不確定排除 ASP.NET 引用有多容易,但至少通過手動驗證傳入的 object,您有一個解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM