C# linux上的ASP.NET Core 2.2项目找不到卫星资源

C# linux上的ASP.NET Core 2.2项目找不到卫星资源,c#,asp.net-core,C#,Asp.net Core,我们已经创建了一个ASP.NET核心MVC项目。我们没有使用新的Microsoft.AspNetCore.Localization结构,而是使用熟悉的老式嵌入式资源。我们创建了一个默认的.resx,后面有一个设计器类,还有本地化的.resx文件。所以我们有Resource.resx+Resource.Designer.cs、Resource.NL.resx、Resource.DE.resx、Resource.FR.resx等等 现在,在Windows上开发期间,以及在IIS中托管时,一切都很好。

我们已经创建了一个ASP.NET核心MVC项目。我们没有使用新的Microsoft.AspNetCore.Localization结构,而是使用熟悉的老式嵌入式资源。我们创建了一个默认的.resx,后面有一个设计器类,还有本地化的.resx文件。所以我们有Resource.resx+Resource.Designer.cs、Resource.NL.resx、Resource.DE.resx、Resource.FR.resx等等

现在,在Windows上开发期间,以及在IIS中托管时,一切都很好。但是,当我们试图在apache中的linux代理上托管时,找不到资源。仅返回默认/不变资源

不幸的是,谷歌没有给我任何解决方案:

只是给你一些代码。。。startup.cs中的配置服务:

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<RequestLocalizationOptions>(options =>
        {
            options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("nl");
            options.SupportedCultures = System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures);
            options.AddSupportedUICultures("nl", "de", "fr");
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddHttpContextAccessor();
    }
红隼配置:

[Unit]
Description=Our ASP.Core 2.2 application

[Service]
WorkingDirectory=/home/websitehome/
ExecStart=/usr/bin/dotnet "/home/websitehome/website.dll"
Restart=always
# Restart service after 10 seconds if dotnet service crashes
RestartSec=10
SyslogIdentifier=messages
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Acceptance
Environment=ConnectionStrings__Master=SERVER=127.0.0.1;DATABASE=database;UID=uid;PWD=password;SslMode=none;

[Install]
WantedBy=multi-user.target
更多信息,以下是资源文件夹+属性:

drwxrwxr-x   2 remco    remco       4096 Oct  2 22:14 NL
内容包括:

-rw-rw-r-- 1 remco    remco    6144 Oct  2 22:14 Base.resources.dll
-rw-rw-r-- 1 remco    remco    5120 Oct  2 22:14 Website.resources.dll
-rw-rw-r-- 1 remco    remco    6144 Oct  2 22:14 APIAccess.resources.dll
有人对Linux上找不到本地化资源的原因有什么建议吗


Remco

查看资源文件的文件名

Linux区分大小写,因此: Resource.NL.resx、Resource.DE.resx、Resource.FR.resx与 Resource.nl.resx、Resource.de.resx、Resource.fr.resx

这可能是问题所在,请查看文件。转到存放资源文件的文件夹并检查确切名称。如果是这种情况,您可以更改这部分代码:

options.AddSupportedUICultures("nl", "de", "fr");

查看资源文件的文件名

Linux区分大小写,因此: Resource.NL.resx、Resource.DE.resx、Resource.FR.resx与 Resource.nl.resx、Resource.de.resx、Resource.fr.resx

这可能是问题所在,请查看文件。转到存放资源文件的文件夹并检查确切名称。如果是这种情况,您可以更改这部分代码:

options.AddSupportedUICultures("nl", "de", "fr");

所以问题是区域性名称是nl,所以.net会查找名为nl的文件夹

但是这些资源被称为resource.NL.resx。。。编译器不会解释这一点,而是直接获取资源名称的这一部分,并使用相同的大小写为其创建资源文件夹


因此,解决方案确实是将文件重命名为resource.nl.resx,这将导致nl小写作为本地化资源的文件夹。

因此问题是区域性名称是nl,因此.net会查找名为nl的文件夹

但是这些资源被称为resource.NL.resx。。。编译器不会解释这一点,而是直接获取资源名称的这一部分,并使用相同的大小写为其创建资源文件夹


因此,解决方案确实是将文件重命名为resource.nl.resx,这将导致nl小写作为本地化资源的文件夹。

您如何部署到linux?@Darkonekt我已更新原始帖子,以包括apache+kestrel配置。我们发布到本地文件夹。然后我们使用ftp over ssh从该文件夹复制到服务器。您是如何部署到linux的?@Darkonekt我已经更新了原始帖子,包括apache+kestrel配置。我们发布到本地文件夹。然后我们使用ftp over ssh从该文件夹复制到服务器。生成后,不再有resx文件,部署文件夹中有一个名为“区域性”的文件夹,由.net生成过程生成,其中包含资源附属程序集。由于这些都是由.net本身生成的,我不认为这是一个外壳问题,只是为了以防万一,我只是再次更新了原始帖子,添加了资源文件夹的内容,这些文件夹具有权限我们正在windows上构建,部署到linux上。生成后,不再有resx文件,部署文件夹中有一个名为“区域性”的文件夹,由.net生成过程生成,其中包含资源附属程序集。由于这些都是由.net本身生成的,我不认为这是一个大小写问题只是为了以防万一,我只是再次更新了原始帖子,添加了资源文件夹的内容及其权限
-rw-rw-r-- 1 remco    remco    6144 Oct  2 22:14 Base.resources.dll
-rw-rw-r-- 1 remco    remco    5120 Oct  2 22:14 Website.resources.dll
-rw-rw-r-- 1 remco    remco    6144 Oct  2 22:14 APIAccess.resources.dll
options.AddSupportedUICultures("nl", "de", "fr");