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

    快毕业了,回顾近三年的.Net历程,整理一下以前的作品中所犯的错误,以及解决方法。

       VB.Net中应用资源,设置如下图:
.Net中资源文件应用的一些经验.Net中资源文件应用的一些经验

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

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

.Net中资源文件应用的一些经验Dim a As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验
Dim b As New Bitmap(a.GetManifestResourceStream("VBResources.Clock01.bmp"))
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验PictureBox1.Image 
= b

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

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

应用如下代码:

.Net中资源文件应用的一些经验Assembly a = Assembly.GetExecutingAssembly();
.Net中资源文件应用的一些经验Bitmap b 
= new Bitmap(a.GetManifestResourceStream("CSharpResources.Clock01.bmp"));
.Net中资源文件应用的一些经验pictureBox1.Image 
= b;
.Net中资源文件应用的一些经验

运行一下,问题出来了:
.Net中资源文件应用的一些经验

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

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

.Net中资源文件应用的一些经验Assembly a = Assembly.GetExecutingAssembly();
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验
//Bitmap b = new Bitmap(a.GetManifestResourceStream("CSharpResources.Clock01.bmp"));
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验
//pictureBox1.Image = b;
.Net中资源文件应用的一些经验

.Net中资源文件应用的一些经验
string[] resourceNames = a.GetManifestResourceNames();
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验
foreach(string name in resourcesNames)
{
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验       Console.WriteLine(name);
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验}

运行一下,在调试环境下的输出框里可以看到:
.Net中资源文件应用的一些经验

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

.Net中资源文件应用的一些经验Assembly a = Assembly.GetExecutingAssembly();
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验Bitmap b 
= new Bitmap(a.GetManifestResourceStream("CSharpResources.res.Clock01.bmp"));
.Net中资源文件应用的一些经验
.Net中资源文件应用的一些经验pictureBox1.Image 
= b;

运行一下,No Problem!
.Net中资源文件应用的一些经验

所以得出结论:

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

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

相关文章: