支持字符串资源的 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" 来生成我的资源文件,现在一切正常