C#中的文件属性以及资源文件的使用



一、C#文件属性

1、什么是文件属性

文件属性可以用来指示项目系统对应文件执行的操作。具体的操作见下文。Visual Basic和Visual C#的文件都具有4个属性:“FileName"、“BuildAcition”、“CustomTool”、”CustomToolNamespace“。

2、CopyToOutputDirectory属性

此属性指定将选定的源文件复制到输出目录所依据的条件。如果从不将文件复制到输出目录,请选择“不复制”;如果总是将文件复制到输出目录,请选择“始终复制”;如果仅当文件比输出目录中同名的现有文件新时才复制此文件,请选择“更新则复制”。

3、BuildAction属性

None:不在项目输出组中包含该文件,并且在生成进程中不会对其进行编译。例如包含文档的文本文件,如自述文件。

Compile:将该文件编译到生成输出中。此设置用于代码文件。

Content:不编译该文件,但将其包含在“内容”(Content)输出组中。例如,此设置是
.htm或其他类型 Web文件的默认值。

Embedded Resource:将该文件作为 DLL或可执行文件嵌入主项目生成输出中。此设置通常用于资源文件。

ApplicationDefinition:和Page类似,但只用于Silverlight的启动页面(默认是App.xaml)。

Page:Silverlight中所有的usercontrol/page/childwindowxaml都属于”Page”build,其他的buildaction不能将build
action不能将codebehind文件和Xaml文件连接起来。

CodeAnalysisDictionary:自定义的CodeAnalysis字典。

Resource:embedsthe
file in a shared (by all files in the assembly with similar setting)assembly manifest resource named AppName.g.resources

SplashScreen:Silverlight的欢迎界面。

DesignData:Sampledata
types will be created as faux types. Use this Build Action when the sampledata types are not creatable or have read-only properties that you want todefined sample data values for.

DesignDataWithDesignTimeCreatableTypes:Sampledata
types will be created using the types defined in the sample data file. Usethis Build Aciton when the sample data types are creatable using their defaultempty constructor.

EntityDeploy:适用于Entity框架。

注意:当在资源编辑器中添加了图像时,它会将”生成操作”设置为“无”,这是因为.resx文件会引用该图像文件。在生成时,该图像会被拖入到从.resx文件创建的.resources文件中。然后可以通过为.resx文件自动生成的强类型类轻松的访问该图像。因此,不应该将此设置更改为”嵌入的资源”,因为这样做的话会在程序集中包含图像两次。

关于资源文件的使用,下文有介绍。

4、FileName属性

通过在“属性”窗口中单击“FileName”属性,然后键入新名称,可以重命名文件。请注意,如果更改文件的名称,则Visual
Studio 将自动重命名与之关联的任何 .vb或
.resx文件。

5、CustomTool属性

自定义工具是可用于在设计时将文件从一种类型转换为另一种类型的组件。例如,自定义工具可以是一个数据集代码生成器,它在一个
XML 架构 (.xsd)文件中读取,在以编程方式公开其表和列的代码文件中生成类。产品中有一个预定义的可用自定义工具列表;此属性使您能够了解哪一个自定义工具适用于某一文件。在极少的情况下,可能需要更改此属性的值。此属性的值必须为空白或内置自定义工具之一。

若要设置或更改自定义工具,请单击“属性”窗口中的“CustomTool”属性,然后键入自定义工具的名称。

6、CustomToolNamespace属性

如果已经将某自定义工具分配到项目,则“CustomToolNamespace”属性将允许您指定一个命名空间,用于分配给自定义工具生成的代码。当为
CustomToolNamespace 属性指定一个值时,自定义工具生成的代码将被放入指定的命名空间中。如果此属性为空,则生成的代码将被放入转换后的文件所在文件夹的默认命名空间中;对于 Visual Basic,它是项目的根命名空间,对于
Visual C#,它对应于该文件夹的“DefaultNamespace”属性的设置。

二、资源文件的使用

1、什么是资源文件

资源文件通常是应用程序使用的任意非可执行的数据文件,如图像、音频和视频文件。资源文件在某些上下文中还可能具有特定的含义。例如,在应用程序本地化的上下文中,资源文件指代
.resx文件,您可以在本地化的附属程序集中部署这些文件。

一般通过统一资源标识符(URI)在代码或
XAML中引用资源文件。所需的
URI格式取决于部署文件的方式。您还可以选择指定相对或绝对
URI。

补充:什么是相对和绝对URI?

a)相对URI指定相对于应用程序根或引用XAML的资源文件位置。例如,"http://www.example.com/resources/picture.png"表示指定域中资源文件夹中的一个文件。如果资源文件所在的域不是应用程序包的宿主域,必须指定绝对
URI。

b)绝对URI是指定资源文件的确切位置,绕过回退机制。

补充:什么是相对于应用程序根、相对于引用XAML和指向其他程序集的URI?

  1. 具有前导斜杠的相对 URI表示相对于应用程序根的位置, 例如"/resources/image.png"。

应用程序根是应用程序包的根文件夹或服务器上应用程序包的位置。 相对 URI回退机制首先搜索应用程序包,然后搜索服务器。
如果在前导斜杠后包括路径,则在这两个位置中搜索相同的文件夹层次结构。

  1. 不具有前导斜杠的相对 URI表示相对于引用
    XAML的位置。 如果在代码中使用相对URI,则引用
    XAML 是您的代码操作的 XAML。

如果引用 XAML位于文件夹中,可以引用相对于该位置的其他文件夹中的文件。
但是,不能在应用程序根上进行搜索,例如"../resources/image.png"。 此
URI搜索包含 XAML的文件夹所在级别上的资源文件夹,假定该文件夹不是应用程序根。

如果从应用程序包加载引用 XAML但是未找到引用的资源文件,则使用默认回退机制。
应用程序包中引用 XAML的路径用于在服务器上搜索。 例如,考虑应用程序包中以下位置的
XAML文件:/pages/xaml/MyPage.xaml。
在这种情况下,回退机制将在服务器上的以下位置搜索"../resources/image.png":/pages/resources/image.png。

如果将引用 XAML编译为程序集,则必须在该同一程序集中嵌入资源文件。
在这种情况下,URI回退机制由ResourceManager类提供。
此回退机制使用语言和区域性设置来查找附属程序集中的资源文件。

c)还可以引用嵌入某程序集的资源文件,该程序集不是包含引用
XAML 的程序集。 在这种情况下,URI使用以下格式:"/assemblyShortName;component/resourceLocation,
例如"/SilverlightLibraryAssembly;component/image.png"。 请注意,需要使用前导斜杠和component关键字(后跟一个斜杠)。

对于其他嵌入的资源,此 URI格式使用ResourceManager类提供的回退机制。

2、资源文件的类型

System.Resources命名空间支持3种资源文件:

.txt文件,只能有字符串资源。因为不能被嵌入到
Assembly中,所以很容易暴露,被客户修改。最大缺点是仅支持字符串资源,所以不推荐使用。

.resx文件,由 XML组成,可以加入任何资源,包括二进制。同样不能被嵌入到
Assembly 中。在 System.Resources名字空间中有专用读写的类。VS.NET
创建这种文件然后将其转成 .resources文件并根据设置将其嵌入到 Assembly
中。

.resources文件,PE格式,可以加入任何资源。唯一可以被嵌入到
Assembly 的文件,在 System.Resources名字空间中有专用读写的类。

3、如何配置资源文件

在 Visual Studio中,可以将资源文件添加到
Silverlight项目并通过设置其"生成操作"值来为部署配置这些资源文件。
可以为 Silverlight项目中的资源文件使用以下生成操作:

  • 资源: 此生成操作会将文件嵌入项目程序集。 您可以将此选项用于应用程序和库项目,并且在应用程序包的内部或外部部署这些程序集。
  • 内容: 此生成操作会将文件包含到应用程序包中,而不嵌入项目程序集。 将此选项用于包中多个程序集共享的资源文件。
  • 无: 此生成操作不会将文件包含到应用程序包或程序集中。 将此选项用于要按需检索的资源文件。 通常在与应用程序包所在服务器位置相同的地方部署按需文件。

注意:在Visual Studio中的“属性”窗口提供了“生成操作”下拉列表的其它几个值。但是当要应用到Silverlight项目时,
只能选择前3项。Silverlight嵌入资源比如始终使用“资源”生成操作,而非“嵌入的资源”生成操作,这是因为后者使用了Silverlight无法识别的格式。

三、在实战中掌握资源文件的用法

在XAML中给Button空间添加背景图片想必都是知道的,下面我们来看看如何在后台给Button添加背景图片。我们新建一个WPF工程,在XAML中添加好Button空间后,双击来处理click事件。

private void btn15_Click(object sender, RoutedEventArgs e)
{
    ImageBrush ib = new ImageBrush();
    ib.ImageSource = new BitmapImage(new Uri(@"Images/1.jpg", UriKind.Relative));
    btn.Background = ib;
}

注意要将该图片设置成Content(内容)。

但如果将最后编译得到的exe文件复制到其他位置后打开,便不再加载出图片,这时我们需要将图片添加到资源文件中。

双击添加的资源文件,选择要添加的文件类型,另外有”添加现有文件“等选择。

添加完成后会出现以下式样。

回到后台代码中。由于资源文件中是Bitmap类型,需要对其进行转换。

public static BitmapSource ChangeBitmapToBitmapSource(Bitmap bmp)
{
    BitmapSource returnSource;
    try
    {
        returnSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
     }
     catch
     {
         returnSource = null;
     }
     return returnSource;
}

转换之后直接添加到Button的Background属性即可。

private void btn_Click(object sender, RoutedEventArgs e)
{
    var img2 = Game.Resource1._2;
    btn.Background = new ImageBrush(ChangeBitmapToBitmapSource(img2));
}

Ok,本篇博客到此为止了,非常感谢Aran的指导。



时间: 2024-12-13 17:28:55

C#中的文件属性以及资源文件的使用的相关文章

[CSharp]6 文件属性以及资源文件的使用

一.C#文件属性 1.什么是文件属性 文件属性可以用来指示项目系统对应文件执行的操作.具体的操作见下文.Visual Basic和Visual C#的文件都具有4个属性:“FileName".“BuildAcition”.“CustomTool”.”CustomToolNamespace“. 2.CopyToOutputDirectory属性 此属性指定将选定的源文件复制到输出目录所依据的条件.如果从不将文件复制到输出目录,请选择“不复制”:如果总是将文件复制到输出目录,请选择“始终复制”:如果

文件属性及资源文件的使用

一.C#文件属性 1.什么是文件属性 文件属性可以用来指示项目系统对应文件执行的操作.具体的操作见下文.Visual Basic和Visual C#的文件都具有4个属性:"FileName"."BuildAcition"."CustomTool"."CustomToolNamespace". 2.CopyToOutputDirectory属性 此属性指定将选定的源文件复制到输出目录所依据的条件.如果从不将文件复制到输出目录,请

Spring MVC程序中怎么得到静态资源文件css,js,图片文件的路径问题

问题描述 在用springmvc开发应用程序的时候.对于像我一样的初学者,而且还是自学的人,有一个很头疼的问题.那就是数据都已经查出来了,但是页面的样式仍然十分简陋,加载不了css.js,图片等资源文件,如果你输入某个css的文件在浏览器中得到的直接是404错误(例如http://localhost:8080/iMax_view/css/classify.css),表示路径肯定没有错,这是因为你在web.xml中配置的springservlet ]<!-- springmvc前端控制器,rest

关于Laravel中使用Laravel-mix打包资源文件的一个坑

今天在尝试把写了一周的项目用laravel-mix中的 mix.version() 命令生成版本化文件时,遇到了一个报错,大概长这样: fs.js:675 return binding.read(fd, buffer, offset, length, postion); ^ Error: EISDIR: illegal operation on a directory, read at Object.fs.readSync (fs.js:675:18) at ..... 一开始还以为哪里写错了,

在服务端中,读取properties资源文件中的数据

1.获取到资源的路径 2.读取数据 //properties文件对象 Properties properties = new Properties(); //通过HttpServletRequest request 对象 获取服务上下文环境中目标文件的真实路径 String realPath = request.getServletContext().getRealPath("/deom.properties"); //加载目标文件的数据 properties.load(new Fil

Java Web应用中自动实时检测资源文件内容变化

在Java Web应用中,我们经常需要配置文件来定制系统行为,这些配置文件可能包括:类路径下的文件和文件夹.非类路径下的绝对路径和相对路径的文件和文件夹,在分布式环境中,还需要通过HTTP从统一集中的Web服务器中获得配置信息,如何对这些配置信息进行自动加载并实时检测变化呢? Java分布式中文分词组件 - word分词已经实现了这个功能,我们看看是如何实现的: package org.apdplat.word.util; import java.io.BufferedReader; impor

idea中maven项目xml资源文件无法读取

解决方法:编辑pom.xml文件 添加如下标签 <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>

如何在Qt资源文件中包含exe等各种类型文件?

操作系统:Windows 10 X64 企业版 Qt: 5.8.0 QtCreater: 4.2.1 刚刚开始学习Qt,不断遇到困难和挑战,前几天在各个QQ群里询问如何在Qt的资源文件中包含和释放exe可执行文件,结果没有谁给我一个准确的答复,包括问写过图书的选手!!我现在非常鄙视写书的选手,是高傲还是为了面子,对于我的问题根本就不回答!!!不仅仅是一个写书选手这样,很多个!!!我相信很多作者都是乐于帮助别人,极少数人才这个德性!!!! Qt做为开发了这么多年的跨平台GUI开发解决方案,我相信这

解决 IDEA 中src下xml等资源文件无法读取的问题

该问题的实质是,idea对classpath的规定. 在eclipse中,把资源文件放在src文件夹下,是可以找到的: 但是在idea中,直接把资源文件放在src文件夹下,如果不进行设置,是不能被找到的. 下面说说几种解决方法,网上说的都很混乱,我这里做一个总结:推荐方法4 1.将所有资源文件放在resources文件夹下 这样做很方便,比较容易想到,但是层次性就很差了,比如mybatis的映射配置文件mapper.xml,本来需要放在特定的包里面,与dao层,service层等层次为同一个层级