我有一个具有以下属性的 asp.net 核心项目:
- 文件名:WebApi.csproj
- 根命名空间:Cmp.WebApi.csproj
- 程序集名称:(未设置)
我正在尝试使用 asp.net 本地化,但资源管理器无法找到语言资源。文档提供了一些答案:
如果程序集的根命名空间不同于程序集名称:
- 默认情况下本地化不起作用。
- 由于在程序集中搜索资源的方式,本地化失败。RootNamespace 是一个构建时值,它对执行进程不可用。如果 RootNamespace 与 AssemblyName 不同,请在 AssemblyInfo.cs 中包含以下内容(将参数值替换为实际值):
using System.Reflection; using Microsoft.Extensions.Localization; [assembly: ResourceLocation("Resource Folder Name")] [assembly: RootNamespace("App Root Namespace")]
问题是在 .net core 5 中不再有 assemblyInfo.cs 文件,而是自动生成的。这意味着我需要以RootNamespace
某种方式添加到 .csproj 文件中。
我怎样才能做到这一点?
编辑 我尝试添加:
<ItemGroup>
<AssemblyMetadata Include="ResourceLocation" Value="Resources" />
<AssemblyMetadata Include="RootNamespace" Value="Cmp.WebApi" />
</ItemGroup>
到 .csproj 文件,但这不起作用 - 它在 obj 中生成了以下 assemblyInfo
[assembly: System.Reflection.AssemblyMetadata("ResourceLocation", "Resources")]
[assembly: System.Reflection.AssemblyMetadata("RootNamespace", "OPG.WebApi")]
另请注意,如果 RootNameSpace 与程序集名称相同,则此方法可以正常工作。
编辑 2
我也试过:
<PropertyGroup>
<AssemblyResourceLocation>Resources</AssemblyResourceLocation>
<AssemblyRootNamespace>Cmp.WebApi</AssemblyRootNamespace>
</PropertyGroup>
但这也不起作用,考虑到我在 msbuild 任务中看不到这些属性,这似乎是合乎逻辑的: