【问题标题】:Error with Blazor WebAssembly Project after upgrade to net5.0升级到 net5.0 后 Blazor WebAssembly 项目出错
【发布时间】:2021-05-26 09:41:57
【问题描述】:

按照此处的升级说明进行操作后;

Migrate Core 3.1 to 5.0

在我的 Blazor WebAssembly 项目上(作为 .Server 项目、.Shared 项目和 .Client 项目运行)。

除了我在解决方案中引用另一个项目时,一切似乎都进展顺利。我希望客户端引用 .Shared 和另一个类库(这在 3.1 之前使用)。我收到以下错误;

错误 BLAZORSDK1001 项目引用了 ASP.NET Core 共享 框架,Blazor WebAssembly 应用程序不支持该框架。消除 如果直接引用,则为框架引用,或包 添加框架引用的引用。

我的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>

【问题讨论】:

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


    【解决方案1】:

    您看到的错误是由 fluentvalidation.aspnetcore 包引起的。此包的当前版本包含对 ASP.NET Core 共享框架的引用。 FluentValidation 的某些服务器端功能需要这些引用,例如在实现验证器拦截器时。

    如果您尝试为您的 WASM 客户端和 ASP.NET 服务器项目使用相同的验证器,并且如果您实现了 IValidatorInterceptor 接口等其中一项功能,那么您的共享验证器将必须引用 fluentvalidation.aspnetcore Blazor 无法使用的包。

    与其在 Startup.cs 类中使用集成验证,在其中向 MVC 控制器添加 fluentvalidation,您必须在 Controller 操作中实例化不同的验证器,并在要验证的对象上调用 Validate 方法解决这个问题。

    此时,Blazor 客户端验证并未集成到官方 FluentValidation 包中,而是需要使用 FluentValidation 文档中指示的单独包。

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

    如果使用 Blazor,我不确定排除 ASP.NET 引用有多容易,但至少通过手动验证传入的对象,你有一个解决方法。

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2021-08-24
      • 1970-01-01
      • 2021-06-03
      相关资源
      最近更新 更多