C# linux上的ASP.NET Core 2.2项目找不到卫星资源
我们已经创建了一个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中的配置服务: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中托管时,一切都很好。
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");