.Net中资源文件应用的一些经验[zz]

http://www.cnblogs.com/srw962/archive/2005/04/07/132961.html
快毕业了,回顾近三年的.Net历程,整理一下以前的作品中所犯的错误,以及解决方法。

       VB.Net中应用资源,设置如下图:

注意,我将所有的图片放到一个文件夹res下,这是为了使工程更有条理。

然后应用下面的代码来使用资源:

Dim a As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly

Dim b As New Bitmap(a.GetManifestResourceStream("VBResources.Clock01.bmp"))

PictureBox1.Image 
= b

这没有问题,但是在C#中这样做就有问题了。我们来试试:

新建C#项目,设置如上面的VB.Net项目。

应用如下代码:

Assembly a = Assembly.GetExecutingAssembly();
Bitmap b 
= new Bitmap(a.GetManifestResourceStream("CSharpResources.Clock01.bmp"));
pictureBox1.Image 
= b;

运行一下,问题出来了:

原来a.GetManifestResourceStream("CSharpResources.Clock01.bmp")出的错,也就是说根本没有检索到CSharpResources.Clock01.bmp这个资源,Why?!

莫非资源不是这个名字?用下面的代码试试:

Assembly a = Assembly.GetExecutingAssembly();

//Bitmap b = new Bitmap(a.GetManifestResourceStream("CSharpResources.Clock01.bmp"));

//pictureBox1.Image = b;

string[] resourceNames = a.GetManifestResourceNames();

foreach(string name in resourcesNames)
{

       Console.WriteLine(name);

}

运行一下,在调试环境下的输出框里可以看到:

原来资源名称是CSharpResources.res.Clock01.bmp才对!,现在修改一下代码:

Assembly a = Assembly.GetExecutingAssembly();

Bitmap b 
= new Bitmap(a.GetManifestResourceStream("CSharpResources.res.Clock01.bmp"));

pictureBox1.Image 
= b;

运行一下,No Problem!

所以得出结论:

VB.Net中资源的名称为:项目默认命名空间.资源文件名

C#中则是:项目命名空间.资源文件所在文件夹名.资源文件名

posted @ 2005-04-07 17:09  小白天地  阅读(537)  评论(0)    收藏  举报