0

我有一个具有以下属性的 asp.net 核心项目:

  • 文件名:WebApi.csproj
  • 根命名空间:Cmp.WebApi.csproj
  • 程序集名称:(未设置)

我正在尝试使用 asp.net 本地化,但资源管理器无法找到语言资源。文档提供了一些答案:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-5.0#rootnamespaceattribute

如果程序集的根命名空间不同于程序集名称:

  • 默认情况下本地化不起作用。
  • 由于在程序集中搜索资源的方式,本地化失败。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 任务中看不到这些属性,这似乎是合乎逻辑的:

https://github.com/dotnet/sdk/blob/main/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateAssemblyInfo.targets

4

1 回答 1

0

一个选项(也是我发现的唯一一个)是添加一个相当空的AssemblyInfo.cs.

using System.Runtime.InteropServices;
using Microsoft.Extensions.Localization;

// In SDK-style projects such as this one, several assembly attributes that were historically
// defined in this file are now automatically added during build and populated with
// values defined in project properties. For details of which attributes are included
// and how to customise this process see: https://aka.ms/assembly-info-properties


// Setting ComVisible to false makes the types in this assembly not visible to COM
// components.  If you need to access a type in this assembly from COM, set the ComVisible
// attribute to true on that type.

[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM.

[assembly: Guid("677ac300-e567-46dd-9281-cafe8d644224")]

[assembly: ResourceLocation("Resources")]
[assembly: RootNamespace("Cmp.WebApi")]

您只需选择properties文件夹,右键单击打开上下文菜单,然后选择add > new item...,然后选择 AssemblyInfo.cs 模板即可:

在此处输入图像描述

这是在一个 asp.net core 5 项目中。

于 2021-09-14T14:22:43.470 回答