Blazor WebAssembly 无法从 class 库加载资源文件
Blazor WebAssembly cannot load resources files from class library
我目前正在开发 .NET Standard 2.1 中托管的 Blazor WebAssembly Asp.NET。
我尝试从单独的 .NET Standard 2.1 加载资源文件。 C# Class 库。
不幸的是,我总是收到以下错误:
"Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
未处理的异常呈现组件:无法加载字段类型 'MyNamespace.Footer:k__BackingField' (0),原因是:无法加载文件或程序集 'MyNamespace.Resources, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。“
- 我的 .resx 文件设置为 访问修饰符:Public 并且在属性选项卡中看起来像这样:
我的项目结构是这样的:
- MyNamespace.BlazorApp.Client
- MyNamespace.BlazorApp.Server
- MyNamespace.BlazorApp.Resources
我这样加载资源:
- MyNamespace.BlazorApp.Client:
在我的 Program.cs 主要方法中,我将当前文化设置如下:
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");
我添加了本地化服务:
services.AddLocalization();
在我想使用文化设置的 .razor 页面上,我注入了本地化服务:
@inject IStringLocalizer<Translations> Translations
- MyNamespace.BlazorApp.Server
这里我只是将项目引用加载到我的资源项目中。我没有在这个项目中使用 .resx。
你知道如何从外部 .NET Standard 2.1 加载资源吗? C# Class 库到 Blazor Wasm 项目?
错误来自名称冲突,项目可以编译但无法加载。
我知道一种让它工作的方法,我不确定这是唯一还是最好的方法。
- 将您的 resx 项目重命名为
MyNamespace.BlazorApp.Translations
- 确保根目录中有 public class 翻译(没有 's')
- 在翻译项目中创建一个名为
Resources
的文件夹
- 将 Translation.resx、Translation.es.resx 等添加到该文件夹
- 将配置更改为
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
Resources 是多个地方的默认名称,将您自己的项目命名为相同名称不是一个好主意。 ResourcesPath 好像是必须的,我不知道默认值是多少。
我目前正在开发 .NET Standard 2.1 中托管的 Blazor WebAssembly Asp.NET。
我尝试从单独的 .NET Standard 2.1 加载资源文件。 C# Class 库。
不幸的是,我总是收到以下错误:
"Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] 未处理的异常呈现组件:无法加载字段类型 'MyNamespace.Footer:k__BackingField' (0),原因是:无法加载文件或程序集 'MyNamespace.Resources, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。“
- 我的 .resx 文件设置为 访问修饰符:Public 并且在属性选项卡中看起来像这样:
我的项目结构是这样的:
- MyNamespace.BlazorApp.Client
- MyNamespace.BlazorApp.Server
- MyNamespace.BlazorApp.Resources
我这样加载资源:
- MyNamespace.BlazorApp.Client:
在我的 Program.cs 主要方法中,我将当前文化设置如下:
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");
我添加了本地化服务:
services.AddLocalization();
在我想使用文化设置的 .razor 页面上,我注入了本地化服务:
@inject IStringLocalizer<Translations> Translations
- MyNamespace.BlazorApp.Server
这里我只是将项目引用加载到我的资源项目中。我没有在这个项目中使用 .resx。
你知道如何从外部 .NET Standard 2.1 加载资源吗? C# Class 库到 Blazor Wasm 项目?
错误来自名称冲突,项目可以编译但无法加载。
我知道一种让它工作的方法,我不确定这是唯一还是最好的方法。
- 将您的 resx 项目重命名为
MyNamespace.BlazorApp.Translations
- 确保根目录中有 public class 翻译(没有 's')
- 在翻译项目中创建一个名为
Resources
的文件夹 - 将 Translation.resx、Translation.es.resx 等添加到该文件夹
- 将配置更改为
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
Resources 是多个地方的默认名称,将您自己的项目命名为相同名称不是一个好主意。 ResourcesPath 好像是必须的,我不知道默认值是多少。