using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Resources;
using System.Reflection;
namespace ResourceWriter
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
        }        private void Form1_Load(object sender, EventArgs e)
        {
            System.Resources.ResourceWriter rw = new System.Resources.ResourceWriter("test.resources");
            rw.AddResource("MyLogo", Image.FromFile(@"图片地址"));// `①
            rw.AddResource("Title", "lianxiyong");
            rw.Generate();
            rw.Close();
        }        private void button1_Click(object sender, EventArgs e)
        {
            ResourceManager rm =new ResourceManager("ResourceWriter.test",GetType().Assembly);
            this.pictureBox1.Image = (Image)rm.GetObject("MyLogo");//②
            this.Text = rm.GetString("Title");         }
    }
}
①rw.AddResource("MyLogo", Image.FromFile(@"图片地址"));变成
Image a=Image.FromFile(@"图片地址"));
rw.AddResource("MyLogo", a);
报错:资源文件已关闭(为什么?)
②报错:
未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“ResourceWriter.test.resources”正确嵌入或链接到程序集“ResourceWriter”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。

解决方案 »

  1.   


      好像资源文件有一个属性,你写完资源文件以后,需要把他的属性设置为  .rex 的状态(好像是.rex,具体的忘记了,你在查查)
      

  2.   


    读取时的这句不对。这个是在当前程序集读资源文件的,你写的资源文件显然是一个外部文件。读取资源文件test.resources时,rm的实例化改成这个:ResourceManager rm =ResourceManager.CreateFileBasedResourceManager("test", Application.StartupPath, null);
      

  3.   

    备注:
    在对 AddResource 的所有调用完成之后,只能调用 Generate 一次。如果写资源时发生异常,输出流将关闭,因为所写信息很可能无效。
    正常情况下,Generate 不关闭输出流。除非您在将额外数据与 .resources 文件组合在一起或以后需要访问流,否则应该在调用 Generate 之后调用 Close,或者只调用 Close。肯定是写资源发生异常关闭了,catch一个看看什么问题
      

  4.   

    C#资源文件读取这样写不就行了?Properties.Resources.vista1