Blazor WebAssembly 无法从类库加载资源文件

azz*_*123 5 c# embedded-resource webassembly blazor

我目前正在开发托管在 .NET Standard 2.1 中的 Blazor WebAssembly Asp.NET。

我尝试从单独的 .NET Standard 2.1 加载资源文件。C# 类库。

不幸的是我总是收到以下错误:

“Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] 未处理的异常渲染组件:无法加载字段“MyNamespace.Footer:k__BackingField”的类型(0),原因是:无法加载文件或程序集“MyNamespace.Resources”, Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' 或其依赖项之一。”

  1. 我的 .resx 文件设置为访问修饰符:公共,在属性选项卡中如下所示:

在此输入图像描述

我的项目结构如下所示:

  • MyNamespace.BlazorApp.Client
  • MyNamespace.BlazorApp.Server
  • MyNamespace.BlazorApp.Resources

我这样加载资源:

  1. MyNamespace.BlazorApp.Client:

在我的 Program.cs Main 方法中,我设置当前区域性如下:

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");
Run Code Online (Sandbox Code Playgroud)

我添加本地化服务:

services.AddLocalization();
Run Code Online (Sandbox Code Playgroud)

接下来,在我想要使用文化设置的 .razor 页面中,我注入了本地化服务:

@inject IStringLocalizer<Translations> Translations
Run Code Online (Sandbox Code Playgroud)
  1. MyNamespace.BlazorApp.Server

这里我只是将项目引用加载到我的资源项目中。我在这个项目中没有使用 .resx。

您知道如何从外部 .NET Standard 2.1 加载资源吗?C# 类库集成到 Blazor Wasm 项目中?

Hen*_*man 3

该错误来自名称冲突,该项目可以编译但无法加载。
我知道一种让它发挥作用的方法,我不确定这是唯一或最好的方法。

  1. 将您的 resx 项目重命名为MyNamespace.BlazorApp.Translations
  2. 确保根目录中有一个公共类 Translation(没有 's')
  3. Resources在翻译项目中创建一个名为的文件夹
  4. 将 Translation.resx、Translation.es.resx 等添加到该文件夹
  5. 将配置更改为builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");

资源是多个地方的默认名称,将您自己的项目命名为相同的名称并不是一个好主意。ResourcesPath 似乎是必需的,我不知道默认值是什么。