Visual C# 应用程序中经常会包含非源代码的数据。此类数据称为“项目资源”,它可以包含应用程序所需的二进制数据、文本文件、音频或视频文件、字符串表、图标、图像、XML 文件或任何其他类型的数据。项目资源数据以 XML 格式存储在 .resx 文件中(默认文件名为 Resources.resx),可在“解决方案资源管理器”中打开此文件。有关项目资源的更多信息,请参见使用资源文件。
可以将资源添加到项目中,方法是:在“解决方案资源管理器”中,在该项目下右击“属性”节点,单击“打开”,再单击“项目设计器”中“资源”页上的“添加资源”按钮。
可以将资源作为链接的资源(外部文件)或嵌入的资源(直接嵌入到 .resx 文件中)添加到项目中。
-
在添加链接的资源时,存储项目资源信息的 .resx 文件仅包含指向磁盘上资源文件的相对路径。如果将图像、视频或其他复杂文件作为链接的资源进行添加,则可以使用默认编辑器编辑它们,可在资源设计器中为文件类型设置关联的默认编辑器。
-
当添加嵌入的资源时,数据直接存储到项目的资源 (.resx) 文件中。字符串只能作为嵌入的资源进行存储。
有关更多信息,请参见链接的资源与嵌入的资源和.Resx 文件格式中的资源。
关联用于编辑各个资源的默认应用程序之后,资源设计器就允许您在开发过程中添加和修改项目资源。右击“解决方案资源管理器”中的“属性”,然后单击“打开”,再单击项目设计器中的“资源”选项卡,可以访问资源设计器。有关更多信息,请参见“项目设计器” ->“资源”页。下面的图示显示了资源设计器菜单选项:
若要编辑嵌入的资源,必须直接处理 .resx 文件来操作每个字符或字节。这就是为什么在开发过程中将复杂文件类型存储为链接的资源更为方便的原因。可以使用 二进制编辑器 以十六进制或 ASCII 格式在二进制级别上编辑资源文件(包括 .resx 文件)。可以使用 图像编辑器 编辑作为链接的资源存储的图标、光标以及 .jpeg 和 GIF 文件。您还可以选择使用其他应用程序作为这些文件类型的编辑器。有关更多信息,请参见在资源编辑器中查看和编辑资源。
当您生成应用程序时,Visual Studio 会调用 resgen.exe 工具,将应用程序资源转换为称为 Resources 的内部类。此类包含在 Resources.Designer.cs 文件中,而该文件嵌套在“解决方案资源管理器”中的 Resources.resx 文件下。Resources 类将所有项目资源封装到静态只读的 get 属性中,作为在运行时提供强类型资源的方式。当通过 Visual C# IDE 进行生成时,所有封装的资源数据(包括嵌入到 .resx 文件中的资源和链接的文件)都被直接编译到应用程序程序集(.exe 或 .dll 文件)中。换句话说,Visual C# IDE 总是使用 /resource 编译器选项。如果从命令行进行生成,则可以指定 /linkresource 编译器选项,以便将资源部署为主应用程序程序集之外的单独文件。这是一种高级应用方案,仅在某些很少见的情况下才需要使用。将资源与主应用程序程序集分开部署的一种更为常见的方案是使用附属程序集,如下所述。
若要在运行时访问资源,只需像引用任何其他类成员一样引用该资源即可。下面的示例显示如何检索名为 Image01 的位图资源。请注意,资源类位于名为 <项目名称>.Properties 的命名空间中,因此,要么每个资源都使用完全限定名,要么在作为资源类访问来源的源文件中添加适当的 using 指令。
System.Drawing.Bitmap bitmap1 = myProject.Properties.Resources.Image01;
在内部,get 属性使用 ResourceManager 类创建对象的新实例。
有关更多信息,请参见应用程序中的资源和资源文件生成器 (Resgen.exe)。
如果您正在创建需要本地化(翻译)为多种语言的应用程序,可以将每组 特定于区域性的字符串作为资源存储在它本身的附属程序集中。当您分发应用程序时,其中应包含主应用程序程序集和任何相应的附属程序集。然后您可以在不重新 编译主应用程序程序集的情况下,添加其他附属程序集或修改现有的附属程序集。有关更多信息,请参见创建附属程序集和定位和使用特定区域性的资源。
——————————————————————————————————————————————————————————————————
外部资源就是以文件夹形式存放的,通过程序访问的资源!