我有一个类库 - 调用它框架。在大会中,我有:

[assembly: NeutralResourcesLanguage("en-US")]
.

在\ Resources \目录下,我有 frameworkresources.resx frameworkresources.fr-fr.resx

在辅助课程中,我用它作为我的资源管理器:

private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly());
.

在代码中,如果我做这样的事情:

String message = manager.GetString("ArgumentNullExceptionMessage", CultureInfo.CurrentCulture);
.

我可以通过christculture调试和悬停,它(和绒毛)设置为fr-fr,但这始终会带回我的默认英文消息 - 而不是来自fr-fr资源文件的法语消息。

应该resourcemanager自动加线,或者我应该写作代码来查询当前文化,然后打开合适的文件?我在假设资源管理器会知道获得FR-FR字符串时,我是不正确的,因为这是当前的文化?

我不确定为什么不起作用。

更新: 我有卫星装配器,所以相信汇编部分正在正常。我认为问题在于我的资源经理。我尝试使用资源集并使用ResourceManager明确地如下:

ResourceManager manager =
    new ResourceManager("Framework.Resources.FrameworkResources",
        Assembly.GetExecutingAssembly());

Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE")));
Debug.WriteLine("el    : " + manager.GetString(resourceName, new CultureInfo("el")));
Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX")));
Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR")));
Debug.WriteLine("hi    : " + manager.GetString(resourceName, new CultureInfo("hi")));
Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN")));
.

结果:

de-DE : Argument '%ArgumentName%' cannot be null or empty.
el    : Argument '%ArgumentName%' cannot be null or empty.
es-MX : Argument '%ArgumentName%' cannot be null or empty.
fr-FR : Argument '%ArgumentName%' cannot be null or empty.
hi    : Argument '%ArgumentName%' cannot be null or empty.
zh-CN : Argument '%ArgumentName%' cannot be null or empty.
.

所以,即使一切都到位,我的资源管理器也根本无法试图在那些卫星装配中看。要清除,在这些程序集中,我有上面的字符串的翻译版本 - 所以它绝对从我的默认FrameWorkResources.Resx文件中读取,而不是特定于文化的文件。

有帮助吗?

解决方案

我想出来了(由于在Interweb上更彻底)。我从单元测试中运行代码,并且即将到来的MSTEST不会“部署”卫星装配。如果我进入测试设置并关闭“部署”,一切都按预期工作。呃!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top