【问题标题】:Blazor WebAssembly cannot load resources files from class libraryBlazor WebAssembly 无法从类库加载资源文件
【发布时间】:2020-11-23 06:16:08
【问题描述】:

我目前正在开发托管在 .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 文件设置为 Access Modifier: Public,在属性选项卡中如下所示:

我的项目结构如下:

  • 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");

我添加了本地化服务:

services.AddLocalization();

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

@inject IStringLocalizer<Translations> Translations
  1. MyNamespace.BlazorApp.Server

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

您知道如何从外部 .NET Standard 2.1 加载资源吗?将 C# 类库导入 Blazor Wasm 项目?

【问题讨论】:

  • 瞎拍……第三方的项目文件里有AddRazorSupportForMvc吗?参考:docs.microsoft.com/en-us/aspnet/core/migration/…
  • 仍然缺少很多细节:Translations 定义在哪里(ns & asm),文件夹结构是什么? resx 文件的确切名称是什么?

标签: c# blazor embedded-resource webassembly


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2021-09-22
    • 2014-10-11
    • 1970-01-01
    • 2021-11-09
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多