创建资源文件
ConsoleApplication1.cs
-----------------
static void Main(string[] args)
{
ResourceWriter rw = new ResourceWriter("my.simple.resources");
rw.AddResource("1","a string from resources");
rw.AddResource("2","string No.2");
rw.Close();
}
运行后,将资源文件my.simple.resources考到use/bin/debug/下面使用资源文件
ConsoleApplicatino2.cs
-------------------------------------
static void Main(string[] args)
{
ResourceReader rr = new ResourceReader("my.simple.resources");
IDictionaryEnumerator de = rr.GetEnumerator();
while( de.MoveNext())
{
Console.WriteLine(de.Value);
}
rr.Close(); //可以正常输出希望得到的字符串 ResourceManager rm = new ResourceManager("my.simple", Assembly.GetExecutingAssembly());
Console.WriteLine(rm.GetString("1"));//出现错误
Console.WriteLine(rm.GetString("2"));
}利用resourseReader方法可以读出资源文件里的字符串,可见资源创建是没有问题的,可是为什么用resourceManager的方法读取的时候会出现“未处理的“System.Resources.MissingManifestResourceException”类型的异常出现在 mscorlib.dll 中。其他信息: 未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源。请确保已将“my.simple.resources”正确嵌入或链接到程序集“ConsoleApplication2”。
baseName: my.simple  locationInfo: <null>  resource file name: my.simple.resources  assembly: ConsoleApplication2, Version=1.0.1677.29919, Culture=neutral, PublicKeyToken=null
”的错误呢?

解决方案 »

  1.   

    ResourceManager rm = new ResourceManager("my.simple", Assembly.GetExecutingAssembly());
    这句意思是访问当前代码正从中运行的程序集(就是你生成的可执行程序)中包含的my.simple.resources资源,但是你并没有把这个资源打包进这个程序集,当然会报告找不到了
      

  2.   

    查了查msdn,找到个简单的替代方法:ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("my.simple",".",null);不过还请sunyou告诉我怎么样吧资源打包进程序集, 我在解决方案中已经添加了my.simple.resources并且标志为迁入的资源,可是还是不行。难道要用al么?岂不是调试起来很不方便?判回复
      

  3.   

    o, 用csc class1.exe  /res:my.simple.resources 解决了大包的问题
    al的命令行提示看不懂。
      

  4.   

    你这样做当然是错的,改成如下:
    ResourceManager rm = new ResourceManager("class1.my.simple", Assembly.GetExecutingAssembly());即加上程序集的名称,资源文件在程序集中的名称可以用ildasm.exe查看
      

  5.   

    也可以用以下方法:
    ---------------------
    //程序集名称对像
    System.Reflection.AssemblyName an = System.Reflection.Assembly.GetExecutingAssembly().GetName();
    //程序集名称
    string strName = an.Name;
    //资源文件名称
    string strRsName = strName + ".my.simple";
    System.Resources.ResourceManager rm = new System.Resources.ResourceManager(strRsName,System.Reflection.Assembly.GetExecutingAssembly());
      

  6.   


    原来嵌入程序集的资源名称会多个前缀,受到!已经验证可行。谢谢NoReady的悉心讲解~ 和codeangel的关注圆满结帖!