从加载的DLL而不是RESX文件中读取RESX内容

时间:2011-07-07 21:05:31

标签: asp.net-mvc c#-4.0 localization resx

我需要对此非常清楚。我不是要读取myfile.resx文件。我正在尝试从myresourcenamespace.myfile.dll中读取内容。

我希望通过访问预先加载到DLL中的内容来创建RESX内容中包含的KVP字典。我当前的解决方案过分依赖于现有的文件和一堆复制,以确保文件是他们需要的位置。此时DLL更可靠。

我已经能够通过“new resourcemanager(myassemblytype)”获得对程序集的访问权限,但我现在陷入困境。我似乎无法从内存中读取实际内容。当我尝试从资源管理器以流的形式访问内容时,我不断遇到MissingManifestException。

这是我成功的代码:

var myType = Type.GetType("ViewRes.StaticMessages", true);
var myResManager = new ResourceManager("StaticMessages", 
                           System.Reflection.Assembly.GetAssembly(myType));

这是我的失败代码:

using (var fileReader = new ResXResourceSet(
                           myResManager.GetStream(myResManager.BaseName)))
{
//.... code read here
}

ResXResourceSet抛出MissingManifestException。我已经尝试了我能想到的一切。

1 个答案:

答案 0 :(得分:0)

而不是:

var myType = Type.GetType("ViewRes.StaticMessages", true);
var myResManager = new ResourceManager("StaticMessages", 
                       System.Reflection.Assembly.GetAssembly(myType));

试试这样:

var myType = Type.GetType("ViewRes.StaticMessages", true);
var myResManager = new ResourceManager("StaticMessages", myType.Assembly);
// you could specify the desired culture for which you would like to get the
// resource values
var culture = CultureInfo.InvariantCulture; 
var resourceSet = myResManager.GetResourceSet(culture, true, true);

现在你可以循环:

foreach (DictionaryEntry item in resourceSet)
{
    var key = item.Key;
    var value = item.Value;
}