Visual Studio项目属性中的各种“生成操作”设置是什么,它们做什么?


843

在大多数情况下,您只需将Visual Studio为其设置的任何内容作为默认值即可。我指的是在解决方案资源管理器中选择的每个文件的BuildAction属性。有很多选择,很难知道每个选择的作用。

Answers:


1014
  • :该文件不包含在项目输出组中,并且在构建过程中未进行编译。一个示例是包含文档的文本文件,例如自述文件。

  • 编译:文件被编译到构建输出中。此设置用于代码文件。

  • 内容:允许您通过Application.GetContentStream(URI)以流的形式检索文件(与程序集位于同一目录中)。为使此方法起作用,它需要一个AssemblyAssociatedContentFile自定义属性,当您将文件标记为“内容”时,Visual Studio会优雅地添加该属性

  • 嵌入式资源:将文件嵌入专用程序集清单资源中。

  • 资源 (仅WPF):将文件嵌入名为AppName.g.resources的共享清单文件资源(由具有相似设置的程序集中的所有文件)。

  • Page (仅WPF):用于将xaml文件编译成baml。所述baml然后嵌有相同的技术Resource(即,可作为`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文件


9
DesignData ”用于“可混合性”,允许您添加基于WPF标记的数据,即在应用正确的设置后在设计时显示。
PGallagher 2013年

6
另请注意,使用一键式部署时将包含内容,但是即使选择了“如果更新则复制”,也不会包含任何内容。
达克斯·福尔

4
假货,CodeAnalysisDictionary和XamlAppRef呢?
克鲁诺

1
@jxramos该信息保存在项目文件中。
Tobias

18
AdditionalFiles呢 我在VS 2015中看到了它,但找不到相关参考。
整体开发人员

111

从文档中:

BuildAction属性指示在执行生成时Visual Studio对文件执行的操作。BuildAction可以具有以下值之一:

无-该文件不包括在项目输出组中,并且在构建过程中未进行编译。一个示例是包含文档的文本文件,例如自述文件。

编译-文件被编译到构建输出中。此设置用于代码文件。

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

嵌入式资源-该文件作为DLL或可执行文件嵌入在主项目构建输出中。它通常用于资源文件。


1
有趣!我已经安装了VS2008,我想知道为什么它们没有出现在我的文档中?
Paul Batum

PRI资源呢?
Yawar

1
@PaulBatum您可以为此引用定义插入参考吗?
Rajan Prasad 2015年

@Raymond 232:引用的定义是什么?
彼得·莫滕森

1
@PaulBatum:是的,引用确实不错。答案以“来自文档”开头,因此希望获得指向该文档的链接。
Marc

35

页面-获取指定的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及更高版本,有一个“影子”操作,可让您生成私有访问器以帮助进行私有类的单元测试。


我希望您不要介意将部分答案复制到Gishu的答案中,以获得更完整的参考答案。
伊恩·博伊德

32

VS2010具有“生成操作”和“复制到输出目录”的属性。因此,如果将copy属性设置为“如果较新则复制”或“始终复制”,则“无”操作仍将复制到构建目录。

因此,应保留“内容”的构建操作,以指示您将通过“ Application.GetContentStream”访问的内容

对于某些外部链接的.config include,我使用了“ None”的“ Build Action”设置和“ Copy if Newer”的“ Copy to Output Direcotry”设置。

G。


谢谢你 但是,我对如何/在何处执行此操作感到困惑。理想情况下,我只想“包含”我的“上传”文件夹,所有子文件都将包含在发布中。
SamJolly

这适用于对象资源管理器中单个项目的属性,当您选择一个项目或右键单击并选择属性时,您将在属性选项卡中看到这些属性。对于您想要的东西,我认为您只需在右键单击该项目时添加现有项目。顺便说一句,“添加现有项目”对话框的“保存”按钮具有一个下拉菜单,允许您将其添加为链接。您仍然可能必须在文件夹中添加项目。
Gerard ONeill 2013年

5

在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

ApplicationDefinition标识包含应用程序定义的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)。


4

Microsoft Connect上的此页面如何(说明DesignData和DesignDataWithDesignTimeCreatableTypes)类型。报价:

下面介绍两个示例数据文件的生成操作。

必须为样本数据.xaml文件分配以下构建操作之一:

DesignData样本数据类型将被创建为人造类型。当样本数据类型不可创建或具有您要为其定义样本数据值的只读属性时,请使用此生成操作。

DesignDataWithDesignTimeCreatableTypes将使用示例数据文件中定义的类型创建示例数据类型。当样本数据类型可以使用其默认的空构造函数创建时,请使用此生成操作。

并不是那么详尽无遗,但至少可以提供一个提示。此MSDN演练还提供了一些想法。我不知道这些构建操作是否也适用于非Silverlight项目。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.