我们正在Visual Studio 2017中工作,并希望通过nuget使用.NET Framework 4.6.1提供c#类库项目。问题在于该项目使用了资源文件。
项目结构如下:
MainLibClass这样访问资源:
using System.Threading;
using System.Globalization;
public class MainLibClass
{
...
public void SetCurrentThreadToCulture(string cultureName)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName);
}
public string foo()
{...
string resourceValue = Resource.ResourceManager.GetString(valueNodeName);
return resourceValue
}
}
该项目有效并针对不同的文化进行了测试(en-US,de-DE等)
我创建了一个nuget包。 从控制台的ProjectFile.csproj文件的文件夹中,我启动了:
nuget spec
nuget pack ProjectFile.csproj -IncludeReferencedProjects
或
nuget pack ProjectFile.csproj -IncludeReferencedProjects -symbols
然后,我创建了一个小型测试控制台应用程序(使用.NET Framework 4.6.1),在其中正确安装了新的nuget数据包。
测试应用程序执行以下操作:
MainLibClass reader = new MainLibClass();
reader.SetCurrentThreadToCulture("de-DE");//"en-US"
string resValTranslated = reader.foo();//Contains only Resource.resx data
现在翻译不再有效! 有谁知道解决这个问题的方法吗?
我可以将资源构建到nuget dll中,还是必须重组nuget,或者,或者,... ???
编辑: 如果我使用Rui Jarimba的nuget结构,则引用的文章Creating localized NuGet packages 如果我在每个特定于语言的dll旁边都包含每个特定于语言的resx文件,并且如果我在第一次访问nuget类之前设置了区域性,那它将起作用! 因此,如果我将测试应用程序更改为:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
MainLibClass reader = new MainLibClass();
string resValTranslated = reader.foo();//Now it works!
编辑2: 但是这种方法只适用一次! 如果我这样做:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
MainLibClass reader = new MainLibClass();
string resValTranslated = reader.foo();//Now it works!
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("de-DE");
MainLibClass reader2 = new MainLibClass();
resValTranslated = reader2.foo();//Now it dont!
编辑3 @LasseVågsætherKarlsen: 正如我在第一次EDIT中已经说过的,nuget文件包含以下结构的解压缩: