正确的使用资源文件

in 未分类

有时需要在项目中将一些资源嵌入到程序集中然后进行调用。

在vs中可以使用ResourceWriter类来创建一个resources资源文件

如:

 

using (ResourceWriter rw = new ResourceWriter("test.resources"))
            {
                rw.AddResource("Name", "aaaa");
                rw.AddResource("Age", "20");
                rw.AddResource("Logo", System.Drawing.Image.FromFile(@"C:\null.jpg"));
                rw.Generate();
                rw.Close();
            }

编译,执行.exe即可生成 test.resources资源文件,下面要做的就是将该文件复制到项目中。

注意的时:该文件属性中的“生成操作项”要选为“嵌入的资源”才行

生成资源文件比较简单,但调用时如果不注意的话,就会失败,就会抛出下面的错误:

但是实际上资源文件已经嵌入了。

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Resources;
using System.IO;
using System.Drawing.Imaging;
using System.Reflection;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
            using (ResourceWriter rw = new ResourceWriter("test.resources"))

            {
                rw.AddResource("Name", "aaaa");
                rw.AddResource("Age", "20");
                rw.AddResource("Logo", System.Drawing.Image.FromFile(@"C:\null.jpg"));
                rw.Generate();
                rw.Close();
            }

            Console.WriteLine("Create Done");
            Console.ReadLine();
            ResourceManager rm = new ResourceManager("ConsoleApplication1.test", Assembly.GetExecutingAssembly());    
            System.Drawing.Image img1 = (System.Drawing.Image)rm.GetObject("Logo");
            Console.WriteLine(img1.Size.Width);
            Console.ReadLine();
        }

    }

}

注意这里:

ResourceManager rm = new ResourceManager("ConsoleApplication1.test", Assembly.GetExecutingAssembly());  

第一个参数"ConsoleApplication1.test"弄错时,就会出现上面提到的错误。正确的应该是:

程序集的NameSpace.资源文件的文件名

这样就不会出错了

3 Comments

3 Comments

  1. 看不懂…潜水…

  2. 这又要学习哈

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>