在大多数情况下,您只需将Visual Studio为其设置的任何内容作为默认值...我指的是在解决方案资源管理器中选择的每个文件的BuildAction属性。有很多选择,很难知道他们每个人会做什么。
答案 0 :(得分:973)
无:该文件未包含在项目输出组中,并且未在构建过程中编译。一个示例是包含文档的文本文件,例如自述文件。
编译:文件被编译到构建输出中。此设置用于代码文件。
内容:允许您通过Application.GetContentStream(URI)检索文件(与程序集在同一目录中)作为流。要使此方法起作用,它需要一个AssemblyAssociatedContentFile自定义属性,当您将文件标记为“内容”时,Visual Studio会慷慨地添加该属性
嵌入资源:将文件嵌入专用程序集清单资源中。
资源 (仅限WPF):将文件嵌入共享(由具有类似设置的程序集中的所有文件),名为AppName.g的程序集清单资源的.resources。
页面 (仅限WPF):用于将xaml
文件编译为baml
。然后使用与baml
相同的技术嵌入Resource
(即可用作“AppName.g.resources”)
ApplicationDefinition (仅限WPF):标记定义应用程序的XAML /类文件。使用x:Class =“Namespace.ClassName”指定代码隐藏,并使用StartupUri =“Window1.xaml”
SplashScreen (仅限WPF):标记为SplashScreen
is shown automatically when an WPF application loads, and then fades的图片
DesignData :编译XAML视图模型,以便可以使用Visual Studio中的示例数据预览用户控件(使用模拟类型)
DesignDataWithDesignTimeCreatableTypes :编译XAML视图模型,以便可以使用Visual Studio中的示例数据预览用户控件(uses actual types)
EntityDeploy :(实体框架):used to deploy the Entity Framework artifacts
CodeAnalysisDictionary :包含custom word dictionary
答案 1 :(得分:107)
来自文档:
BuildAction属性指示 Visual Studio对文件的作用 何时执行构建。 BuildAction的 可以有以下几个值之一:
无 - 该文件未包含在 项目输出组而不是 在构建过程中编译。一个 示例是包含的文本文件 文档,例如自述文件。
编译 - 将文件编译到 构建输出。使用此设置 代码文件。
内容 - 文件未编译, 但包含在内容输出中 组。例如,此设置为 .htm或其他的默认值 一种网络文件。
嵌入式资源 - 此文件是 嵌入主项目构建中 输出为DLL或可执行文件。它是 通常用于资源文件。
答案 2 :(得分:34)
页面 - 获取指定的XAML文件,并编译为BAML,并将该输出嵌入到程序集的托管资源流中(特别是AssemblyName.g.resources),此外,如果您在根XAML上具有适当的属性在文件中,它将创建一个blah.g.cs文件,该文件将包含该页面的“codebehind”的部分类;这基本上涉及调用BAML goop将文件重新保存到内存中,并将类的任何成员变量设置为现在创建的项(例如,如果你将x:Name =“foo”放在项目上,你将能够做到这一点.foo.Background =紫色;或类似的。
ApplicationDefinition - 类似于Page,除了它是一步之外,并定义了应用程序的入口点,它将实例化你的app对象,在其上调用run,然后将实例化StartupUri属性设置的类型,并将给你的主窗口。
另外,要明确的是,这个问题在结果集中总体上是无效的;任何人都可以通过构建MSBuild任务来定义其他BuildActions。如果您查看%systemroot%\ Microsoft.net \ framework \ v {version} \目录,并查看Microsoft.Common.targets文件,您应该能够解密更多(例如,使用VS Pro及更高版本,有一个“阴影”动作,允许您生成私有访问器,以帮助单元测试私有类。
答案 3 :(得分:29)
VS2010具有“构建操作”的属性,也具有“复制到输出目录”的属性。因此,如果将copy属性设置为“Copy if Newer”或“Copy Always”,则“None”的操作仍会复制到构建目录。
因此,应保留“内容”的构建操作,以指示您将通过“Application.GetContentStream”访问的内容
对于某些外部链接的.config包含,我使用了“无”的“构建操作”设置和“复制到输出指令”设置“复制如果更新”。
-G。
答案 4 :(得分:5)
在VS2008中,似乎最有用的doc条目是:
Windows Presentation Foundation构建WPF应用程序(WPF)
MS-帮助://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标记文件,其内容转换为二进制格式并编译为程序集。页面项通常与代码隐藏类一起实现。
最常见的页面项是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)。
答案 5 :(得分:4)
Microsoft Connect(解释DesignData和DesignDataWithDesignTimeCreatableTypes)类型的this page怎么样?引用:
以下介绍了两个示例数据文件的构建操作。
示例数据.xaml文件必须分配以下构建操作之一:
DesignData :示例数据类型将创建为虚假类型。当样本数据类型不可创建或具有您要为其定义样本数据值的只读属性时,请使用此构建操作。
DesignDataWithDesignTimeCreatableTypes :将使用示例数据文件中定义的类型创建示例数据类型。当样本数据类型可以使用其默认的空构造函数创建时,请使用此构建操作。
不所以令人难以置信的详尽无遗,但它至少给出了一个暗示。 This MSDN walkthrough也提供了一些想法。我不知道这些构建操作是否也适用于非Silverlight项目。
答案 6 :(得分:4)
答案 7 :(得分:1)
构建操作控制项目中每个项目的 MSBuild 项目类型。例如,Compile
上的 MyClass.cs
构建操作在您的 .csproj
文件中的含义如下:
<ItemGroup>
<Compile>MyClass.cs</Compile>
</ItemGroup>
按照惯例,项目类型具有特定含义。常见类型有 Compile
、Content
和 None
,但还有其他类型。
例如,.editorconfig
文件有自己的项目类型 (EditorConfigFiles
)。文件可以通过使用“C# 分析器附加文件”(AdditionalFiles
) 标记来传递给分析器。
您也可以通过 AvailableItemName
在您的项目中define your own item types 用于您自己的目的。例如:
<ItemGroup>
<AvailableItemName Include="Foo" />
</ItemGroup>
这样做会产生: