我有这个函数,它可以很好地从这个名为OkayMessages的特定资源文件中获得一个转换后的值。
public static string GetResourceString(string resourceKey){
ResourceManager resourceManager = Resources.OkayMessages.ResourceManager;
return resourceManager.GetString(resourceKey);
}但是我有超过一个资源文件,我希望这个函数也能从这些文件中得到值。只是,我在动态/编程地选择正确的资源(管理器)时遇到了问题。我尝试使用下面的代码,以及其中的一些变体,但我总是会遇到错误。
public static string GetResourceString(string resourceFile, string resourceKey){
ResourceManager resourceManager = new System.Resources.ResourceManager("Resources." + resourceFile, Assembly.GetExecutingAssembly());
return resourceManager.GetString(resourceKey);
}大多数情况下,我遇到的错误是:找不到适合指定区域性或中性区域性的任何资源。确保"Resources.OkayMessages.resources“被正确嵌入或链接到程序集中。
更新:--我使用\App_GlobalResources\文件夹来处理我的资源文件,这似乎就是问题所在。当我将一个资源文件放在我的项目的根目录中时,我可以没有问题地初始化一个ResourceManager。
发布于 2012-07-08 15:57:54
在错误的方向搜索了一段时间后,我找到了这个问题最简单的答案。结果是有一种叫做GetGlobalResourceObject的方法。
因此,在我的例子中,我现在使用这一行代码来完成所有的工作:
GetGlobalResourceObject("OkayMessages", "PasswordChanged").ToString();发布于 2012-07-08 11:38:09
仔细阅读这个文章,您会发现您需要指定正确的资源命名空间。这是你的问题。如果OkayResources.resx驻留在项目根文件夹中,下面是工作示例:
using System.Reflection;
using System.Resources;
using System.Web.UI;
namespace WebApplication1
{
public partial class _Default : Page
{
public _Default()
{
var result = GetResourceString("OkayResources", "SomeKey");
}
private static string GetResourceString(string resourceFileName, string key)
{
var resourceName = "WebApplication1." + resourceFileName;
var resourceManager = new ResourceManager(resourceName, Assembly.GetExecutingAssembly());
return resourceManager.GetString(key);
}
}
}如果将资源文件放入参考资料文件夹,则必须更新资源命名空间:
var resourceName = "WebApplication1.Resources." + resourceFileName;https://stackoverflow.com/questions/11181211
复制相似问题