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

Gis*_*shu 827 projects-and-solutions visual-studio

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

Gis*_*shu 991

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

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

  • 内容:允许您通过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 :( 实体框架):用于部署Entity Framework工件

  • CodeAnalysisDictionary:包含XML文件的自定义词典拼写规则

  • 那些`AdditionalFiles`怎么样?我在VS 2015中看到它,但无法找到它的参考. (18认同)
  • "**DesignData**"用于"Blendability",允许您添加基于WPF标记的数据,即,在应用正确设置时,然后在设计时显示. (9认同)
  • 另请注意,使用一键部署时将包含内容,但即使选择"复制如果更新",也不会显示"无". (6认同)
  • 那么Fakes,CodeAnalysisDictionary和XamlAppRef呢? (4认同)

Pau*_*tum 110

从文档:

BuildAction属性指示Visual Studio在执行构建时对文件执行的操作.BuildAction可以具有以下几个值之一:

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

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

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

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

  • @PaulBatum 你能插入这个引用定义的参考吗? (2认同)

Dom*_*ton 35

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

ApplicationDefinition - 类似于Page,除了它是一步之外,它定义了应用程序的入口点,它将实例化你的app对象,调用它运行,然后实例化StartupUri属性设置的类型,并给你的主窗口.

另外,要明确的是,这个问题总体来说就是它的结果集; 任何人都可以通过构建MSBuild任务来定义其他BuildActions.如果您查看%systemroot%\ Microsoft.net\framework\v {version} \目录,并查看Microsoft.Common.targets文件,您应该能够解密更多(例如,使用VS Pro及更高版本,有一个"阴影"动作,允许您生成私有访问器,以帮助单元测试私有类.


Ger*_*ill 30

VS2010具有"构建操作"的属性,也具有"复制到输出目录"的属性.因此,如果将copy属性设置为"Copy if Newer"或"Copy Always",则"None"的操作仍将复制到构建目录.

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

对于某些外部链接的.config包含,我使用了"无"的"构建操作"设置和"复制到输出指令"设置的"复制如果更新".

G.


Jam*_*ore 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).
Run Code Online (Sandbox Code Playgroud)

资源标识编译到应用程序程序集中的资源文件.如前所述,UICulture处理资源项.

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


Dre*_*kes 5

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

<ItemGroup>
  <Compile>MyClass.cs</Compile>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

您还可以通过 出于自己的目的在项目中定义自己的项目类型AvailableItemName。例如:

<ItemGroup>
  <AvailableItemName Include="Foo" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这样做会产生:

在此输入图像描述