Visual Studio项目属性中的各种“构建操作”设置是什么,它们的作用是什么?

在大多数情况下,您只需将Visual Studio为您设置的任何内容作为默认设置……我指的是解决方案资源管理器中选择的每个文件的构建操作属性。有许多选项,很难知道它们中的每一个会做什么。

370698 次浏览

从留档:

BuildAction属性表示Visual Studio对文件的作用执行构建时。BuildAction可以有几个值之一:

无-文件不包含在项目输出组,而不是在构建过程中编译。一个示例是一个文本文件,其中包含留档,例如自述文件。

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

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

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

  • <出路>无:该文件不包含在项目输出组中,也不在构建过程中编译。一个示例是包含留档的文本文件,例如自述文件。

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

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

  • 嵌入式资源:将文件嵌入到独占程序集清单资源中。

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

  • Page(仅限WPF):用于将xaml文件编译为baml。然后用与Resource相同的技术嵌入baml(即可用作'AppName.g.resources)

  • Application ationDefition(仅限WPF):标记定义应用程序的XAML/class文件。您可以使用x: Class="Namesspace. ClassName"指定代码隐藏,并使用StartupUri="Window1.xaml"设置启动表单/页面

  • SplashScreen(仅限WPF):当WPF应用程序加载时,标记为SplashScreen(使用实际类型)

  • EntityDeploy(Entity Framework)用于部署Entity Framework工件

  • 一个XML文件,包含自定义单词字典用于拼写规则

Page——获取指定的XAML文件,并编译成BAML,然后将输出嵌入到程序集的托管资源流中(特别是AssemblyName.g.resources),此外,如果您在文件中的根XAML元素上具有适当的属性,它将创建一个blah.g.cs文件,该文件将包含该页面的“代码隐藏”的部分类;这基本上涉及调用BAML goop将文件重新水合到内存中,并将类的任何成员变量设置为现在创建的项目(例如,如果您将x: Name=“foo”放在项目上,您将能够this.foo.背景=紫色;或类似的。

应用定义类似于Page,只是它会进一步进行一次,并定义应用程序的切入点,该切入点将实例化应用程序对象,对其调用run,然后实例化StartupUri属性设置的类型,并给出主窗口。

此外,需要明确的是,这个问题在其结果集中是无限的;任何人都可以通过构建MSBuild任务来定义额外的BuildActions。如果您查看%system root%\Microsoft.net\Framework\v{version}\目录,并查看Microsoft.Common.targets文件,您应该能够破译更多(例如,在VS Pro及更高版本中,有一个“影子”操作允许您生成私有访问器来帮助单元测试私有类。

在VS2008中,似乎最有用的doc条目是:

Windows演示文稿基金会构建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时,Application ationDefition是必需的。WPF应用程序以及因此的MSBuild项目只能有一个Application ationDefition。

页面标识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处理资源项。

内容标识与应用程序一起分发的内容文件。描述内容文件的元数据被编译到应用程序中(使用AssemblyAssociatedContentFileAt的)。

VS2010有一个用于“Build Action”的属性,也有一个用于“Copy to Output Directory”的属性。因此,如果复制属性设置为“Copy if Newer”或“Copy All”,“无”的操作仍将复制到构建目录。

因此,应保留“Content”的Build Action以指示您将通过“Application. GetContentStream”访问的内容

对于一些外部链接的. config包含,我使用了“无”的“构建操作”设置和“如果更新则复制”的“复制到输出目录”设置。

G.

Microsoft Connect中的此页面(解释DesignData和DesignDataWith DesignTimeCreatableTypes)类型如何。引用:

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

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

设计数据示例数据类型将被创建为人造类型。当示例数据类型不可创建或具有您要为其定义示例数据值的只读属性时,请使用此构建操作。##3设计数据示例数据类型将被创建为人造类型。当示例数据类型不可创建或具有您要为其定义示例数据值的只读属性时,请使用此构建操作。

带有设计时间的设计数据创建表类型将使用示例数据文件中定义的类型创建示例数据类型。当示例数据类型可使用其默认空构造函数创建时,请使用此构建操作。##3带有设计时间的设计数据创建表类型将使用示例数据文件中定义的类型创建示例数据类型。当示例数据类型可使用其默认空构造函数创建时,请使用此构建操作。

所以不是非常详尽,但它至少给出了一个提示。MSDN走查也给出了一些想法。我不知道这些构建操作是否也适用于非Silverlight项目。

  • 假货: Microsoft Fakes(单元测试隔离)框架的一部分。并非在所有Visual Studio版本上都可用。Fakes用于支持项目中的单元测试,通过用存根或垫片替换应用程序的其他部分来帮助您隔离正在测试的代码。更多信息在这里:https://msdn.microsoft.com/en-us/library/hh549175.aspx

构建操作控制项目中每个项目的MSBuild项目类型。例如,MyClass.cs上的Compile构建操作在.csproj文件中意味着这样的内容:

<ItemGroup><Compile>MyClass.cs</Compile></ItemGroup>

项目类型按照惯例有特定的含义。常见的类型有CompileContentNone,但也有其他类型。

例如,.editorconfig文件有自己的项目类型(EditorConfigFiles)。文件可以通过标记“C#analyzer附加文件”(AdditionalFiles)传递给分析器。

您也可以通过AvailableItemName在您的项目中为自己的目的进行定义您自己的项目类型。例如:

<ItemGroup><AvailableItemName Include="Foo" /></ItemGroup>

这样做将产生:

在此处输入图片描述