软件测试之Microsoft .NET 框架资源基础

发表于:2009-08-17来源:作者:点击数: 标签:软件测试框架NetNETMicrosoft
软件测试之Microsoft .NET 框架资源基础 软件测试工具 关键字:.NET 框架资源假设要在应用程序中通过从文件加载位图来设置窗体的背景图像: publicForm1(){ ... //Loadafilefromthefilesystem this.BackgroundImage= newBitmap(@"C:\ WINDOWS \Web\Wallpaper

软件测试之Microsoft .NET 框架资源基础  软件测试工具

关键字:.NET 框架资源假设要在应用程序中通过从文件加载位图来设置窗体的背景图像:

public Form1() {
  ...
  // Load a file from the file system
  this.BackgroundImage =
    new Bitmap(@"C:\WINDOWS\Web\Wallpaper\Azul.jpg");
}

该代码的问题是,并非所有 Microsoft Windows 的安装实例都有 Azul.jpg,即使是那些确实具有该文件的安装实例,该文件可能也不在安装实例的相同位置。即使您与应用程序一起交付该图片,节省空间的用户也可能决定删除它,这会导致您的应用程序出错。确保图片或任何文件与代码在一起的唯一安全方式是将它作为资源嵌入并加载。

清单资源
资源是在编译时添加到程序集中的。例如,如果您使用命令行编译器,则可以使用 /resource 开关嵌入资源:

C:\>csc.exe myApp.cs /resource:c:\windows\web\wallpaper\Azul.jpg

/resource 开关将文件作为资源嵌入,嵌入时使用文件名(没有路径)作为资源名称。文件嵌入到程序集的清单 资源集中。程序集的清单由一组作为程序集一部分的元数据组成。该元数据的一部分是与每个嵌入资源关联的名称和数据。执行 ildasm 时,可以在清单部分看见程序集清单资源的列表,如图 1 所示。

C:\>ildasm.exe myApp.exe



图 1. ildasm 显示嵌入资源


可以像 ildasm 一样枚举清单资源的列表,这需要使用 System.Reflection.Assembly 类的 GetManifestResourceNames 方法:

using System.Reflection;
...
// Get this type’s assembly
Assembly assem = this.GetType().Assembly;

// Enumerate the assembly’s manifest resources
foreach( string resourceName in assem.GetManifestResourceNames() ) {
  MessageBox.Show(resourceName);
}

原文转自:http://www.ltesting.net