支持字符串资源的 c# 自定义属性不加载本地化资源
c# Custom Attribute with support for string resources does not load localized resources
我有一个包含此自定义属性的 DLL
[AttributeUsage(AttributeTargets.Class)]
public class MyAttribute: System.Attribute {
private ResourceManager resManager = null;
public MyAttribute() {
}
public Type ResourceType { get; set; }
private string caption = string.Empty;
public string Caption {
get { return getResourceString(caption); }
set { caption = value; }
} //Caption
private string getResourceString(string resourceKey) {
if (string.IsNullOrWhiteSpace(resourceKey))
return string.Empty;
if (ResourceType == default(Type))
return resourceKey;
if (resManager == null)
resManager = new ResourceManager(ResourceType);
return resManager.GetString(resourceKey) ?? string.Format("[[{0}]]", resourceKey);
} //getResourceString()
}
还有一个使用 MyAttribute 的程序 (exe),并且还具有 Resources.resx 和 [=22= 中英语和法语所需的资源 (resKeyHello) ]Resources.fr.resx分别
[MyAttribute(Caption="resKeyHello", ResourceType=typeof(Resources)]
public Foo() {
}
问题是它从不使用法语卫星程序集。我还尝试像这样创建 ResourceManager ResourceManager(ResourceType.FullName, ResourceType.Assembly),但没有任何效果。并且还尝试像这样加载资源 resManager.GetString(resourceKey, Thread.CurrentThread.CurrentUICulture)
我可以在调试器中看到 CurrentUICulture 是法语的。
我终于找到了解决方法。
问题似乎与法语资源文件的生成方式有关。我使用了 Project -> New -> Resources file with same name and .fr.resx extension.
附属 DLL 是在 ./bin/fr 子文件夹中编译期间生成的,但运行时没有看到它。
最后我使用 CodePlex 中的 "ResX Resource Manager" 来生成我的资源文件,现在一切正常
我有一个包含此自定义属性的 DLL
[AttributeUsage(AttributeTargets.Class)]
public class MyAttribute: System.Attribute {
private ResourceManager resManager = null;
public MyAttribute() {
}
public Type ResourceType { get; set; }
private string caption = string.Empty;
public string Caption {
get { return getResourceString(caption); }
set { caption = value; }
} //Caption
private string getResourceString(string resourceKey) {
if (string.IsNullOrWhiteSpace(resourceKey))
return string.Empty;
if (ResourceType == default(Type))
return resourceKey;
if (resManager == null)
resManager = new ResourceManager(ResourceType);
return resManager.GetString(resourceKey) ?? string.Format("[[{0}]]", resourceKey);
} //getResourceString()
}
还有一个使用 MyAttribute 的程序 (exe),并且还具有 Resources.resx 和 [=22= 中英语和法语所需的资源 (resKeyHello) ]Resources.fr.resx分别
[MyAttribute(Caption="resKeyHello", ResourceType=typeof(Resources)]
public Foo() {
}
问题是它从不使用法语卫星程序集。我还尝试像这样创建 ResourceManager ResourceManager(ResourceType.FullName, ResourceType.Assembly),但没有任何效果。并且还尝试像这样加载资源 resManager.GetString(resourceKey, Thread.CurrentThread.CurrentUICulture)
我可以在调试器中看到 CurrentUICulture 是法语的。
我终于找到了解决方法。
问题似乎与法语资源文件的生成方式有关。我使用了 Project -> New -> Resources file with same name and .fr.resx extension.
附属 DLL 是在 ./bin/fr 子文件夹中编译期间生成的,但运行时没有看到它。
最后我使用 CodePlex 中的 "ResX Resource Manager" 来生成我的资源文件,现在一切正常