Visual Studio项目属性中的各种"生成操作"设置是什么,它们是做什么的?
在大多数情况下,只需将Visual Studio为我们设置的内容作为默认值即可。我指的是在解决方案资源管理器中选择的每个文件的BuildAction属性。有很多选项,很难知道每个选项都会做什么。
解决方案
从文档中:
The BuildAction property indicates what Visual Studio does with a file when a build is executed. BuildAction can have one of several values: None - The file is not included in the project output group and is not compiled in the build process. An example is a text file that contains documentation, such as a Readme file. Compile - The file is compiled into the build output. This setting is used for code files. Content - The file is not compiled, but is included in the Content output group. For example, this setting is the default value for an .htm or other kind of Web file. Embedded Resource - This file is embedded in the main project build output as a DLL or executable. It is typically used for resource files.
- 无:该文件不包括在项目输出组中,并且在构建过程中未进行编译。一个示例是包含文档的文本文件,例如自述文件。
- 编译:该文件被编译到构建输出中。此设置用于代码文件。
- 内容:允许我们通过Application.GetContentStream(URI)以流的形式检索文件(与程序集位于同一目录中)。为了使此方法起作用,它需要一个AssemblyAssociatedContentFile定制属性,当我们将文件标记为"内容"时,Visual Studio会优雅地添加该属性
- 嵌入的资源:将文件嵌入到专用程序集清单资源中。
- 资源(仅WPF):将文件嵌入名为AppName.g.resources的共享清单文件资源(由具有相似设置的程序集中的所有文件)。
- 页面(仅适用于WPF):用于将xaml文件编译为baml。然后,使用与"资源"相同的技术嵌入" baml"(即,可以作为" AppName.g.resources"使用)
- ApplicationDefinition(仅WPF):标记定义应用程序的XAML /类文件。我们可以使用x:Class =" Namespace.ClassName"指定代码后缀,并使用StartupUri =" Window1.xaml"设置启动表单/页面。
- SplashScreen(仅限WPF):标记为" SplashScreen"的图像会在WPF应用程序加载后自动显示,然后淡出
- DesignData:编译XAML视图模型,以便可以在Visual Studio中使用示例数据预览用户控件(使用模拟类型)
- DesignDataWithDesignTimeCreatableTypes:编译XAML视图模型,以便可以在Visual Studio中使用示例数据预览用户控件(使用实际类型)
- EntityDeploy :(实体框架):用于部署实体框架工件
- CodeAnalysisDictionary:一个XML文件,其中包含用于拼写规则的自定义单词词典
页面-接收指定的XAML文件,并将其编译为BAML,并将输出嵌入到程序集的托管资源流中(特别是AssemblyName.g.resources),此外,如果在文件的根XAML元素上具有适当的属性,它将创建一个blah.g.cs文件,该文件将包含该页面的"代码隐藏"的部分类;这基本上涉及到对BAML goop的调用,以将文件重新水化到内存中,并将类的任何成员变量设置为现在创建的项(例如,如果将x:Name =" foo"放在项上,我们就可以做到这一点。foo.Background= Purple;或者类似的方法。
ApplicationDefinition-与Page相似,不同之处在于它一步一步前进,并定义了应用程序的入口点,该入口点将实例化应用程序对象,调用在其上运行,然后实例化由StartupUri属性设置的类型,并提供主窗口。
同样,要明确的是,这个问题总体上在其结果集中是不确定的。任何人都可以仅通过构建MSBuild任务来定义其他BuildAction。如果我们查看%systemroot%\ Microsoft.net \ framework \ v {version} \目录,并查看Microsoft.Common.targets文件,则我们应该能够解密更多内容(例如,使用VS Pro及更高版本,有一个"影子"操作,可让我们生成私有访问器以帮助进行私有类的单元测试。
在VS2008中,最有用的doc条目是:
Windows Presentation Foundation构建WPF应用程序(WPF)
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm
应用定义
标识包含应用程序定义的XAML标记文件(其根元素为Application的XAML标记文件)。当Install为true且OutputType为winexe时,ApplicationDefinition是必需的。一个WPF应用程序以及一个MSBuild项目只能具有一个ApplicationDefinition。
页
标识XAML标记文件,其内容将转换为二进制格式并编译为程序集。页面项通常与代码隐藏类一起实现。
最常见的Page项是XAML文件,其顶级元素是以下之一:
Window (System.Windows..::.Window). Page (System.Windows.Controls..::.Page). PageFunction (System.Windows.Navigation..::.PageFunction<(Of <(T>)>)). ResourceDictionary (System.Windows..::.ResourceDictionary). FlowDocument (System.Windows.Documents..::.FlowDocument). UserControl (System.Windows.Controls..::.UserControl).
资源资源
标识已编译到应用程序程序集中的资源文件。如前所述,UICulture处理资源项。
内容
标识与应用程序一起分发的内容文件。描述内容文件的元数据被编译到应用程序中(使用AssemblyAssociatedContentFileAttribute)。