我的网站有本地化(多语言)
我为每种文化使用 ASP.NET 资源文件,例如:
- Controllers.UserProfileController.en-ca.resx
- Controllers.UserProfileController.es-us.resx
- Controllers.UserProfileController.pt-br.resx
等等..
我在 Startup.cs 中也有这一行
services.AddLocalization(options => options.ResourcesPath = "ResourcesDirectoryFolderName");
当我构建和发布网站时,它会在 bin 文件夹中为每种文化创建一个文件夹,例如:
- C:\User\Documents\SchoolApp\School.API\bin\Release\netcoreapp3.1\en-ca
- C:\User\Documents\SchoolApp\School.API\bin\Release\netcoreapp3.1\es-us
- C:\User\Documents\SchoolApp\School.API\bin\Release\netcoreapp3.1\pt-BR
在每个文件夹中,我都有一些 DLL 文件。这很好。
当我使用 Azure 管道编译/构建/发布应用程序 (CI/CD) 时出现问题。它正在抛出错误:
##[error] /usr/share/dotnet/sdk/3.1.401/Microsoft.Common.CurrentVersion.targets(4364,5): Error MSB3021: Unable to copy file "/home/vsts/work/1/s/School.Services/bin/Release/netcoreapp3.1/pt-br/School.Services.resources.dll" to "bin/Release/netcoreapp3.1/pt-br/School.Services.resources.dll". Could not find a part of the path '/home/vsts/work/1/s/School.API/bin/Release/netcoreapp3.1/pt-br/School.Services.resources.dll'.
如果在本地一切正常。在我的本地主机上构建或发布时,我没有收到错误消息。这发生在 Azure Pipelines 上。
这只发生在 pt-br
上。对于其他文化,我没有收到错误。在添加 pt-br
之前我没有收到任何错误。
请注意,资源文件名中使用了pt-br
(小写),但是在bin文件夹中生成文件夹时,它被命名为pt-BR
(大写BR) .这种区分大小写可能是问题所在吗?也许在复制文件时,Azure Pipelines 正在寻找文件夹名称 pt-br
但实际上是系统生成的文件夹名称 pt-BR
?为什么其他文化没有遇到这个问题,而只有 pt-br
?
我按照此处的说明构建了我的多语言应用程序:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1
我该如何解决?
最佳答案
Could this case sensitivity be the problem?
Linux 中与复制相关的命令是区分大小写的。 (你在 Ubuntu 机器上运行管道)。所以我同意 case sensitivity
可能是问题所在。
看起来你的School.API
项目依赖于School.Services
项目,所以你需要检查这两个项目,了解为什么文件夹生成为 pt-BR
.
你应该检查这两个项目的项目文件和资源文件。此外,作为一种快速解决方法,我建议您可以将资源文件重命名为 Controllers.UserProfileController.pt-BR.resx
。参见 Supported Culture Codes
,pt-BR
是代表Portuguese (Brazil)
的原始格式。
关于c# - 无法复制文件,找不到部分路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63805983/