886

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

4

8 回答 8

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

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

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

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

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

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

  • 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 文件,其中包含用于拼写规则的自定义单词词典

于 2008-09-28T12:29:21.287 回答
116

从文档中:

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

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

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

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

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

于 2008-09-28T12:20:35.347 回答
35

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

ApplicationDefinition - 类似于 Page,除了它更进一步,并定义了应用程序的入口点,该入口点将实例化您的应用程序对象,在其上调用 run,然后实例化 StartupUri 属性设置的类型,并为您的主窗口提供.

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

于 2008-09-28T16:12:14.510 回答
33

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

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

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

G。

于 2013-04-09T21:37:14.857 回答
5

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

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。

Page 标识其内容被转换为二进制格式并编译为程序集的 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).

Resource 标识编译成应用程序程序集的资源文件。如前所述,UICulture 处理资源项。

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

于 2009-03-31T17:53:36.640 回答
5

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

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

根据约定,项目类型具有特定含义。常见的类型是Compile,ContentNone,但还有其他类型。

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

您还可以通过AvailableItemName. 例如:

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

这样做会产生:

在此处输入图像描述

于 2021-05-13T01:34:04.007 回答
4

Microsoft Connect 的这个页面怎么样(解释 DesignData 和 DesignDataWithDesignTimeCreatableTypes)类型。报价:

下面描述了示例数据文件的两个构建操作。

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

DesignData样本数据类型将被创建为虚假类型。当示例数据类型不可创建或具有要为其定义示例数据值的只读属性时,请使用此构建操作。

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

不是那么令人难以置信的详尽,但它至少给出了一个提示。这个 MSDN walkthrough也给出了一些想法。我不知道这些构建操作是否也适用于非 Silverlight 项目。

于 2013-10-10T07:01:45.973 回答
4
  • Fakes: Microsoft Fakes(单元测试隔离)框架的一部分。并非在所有 Visual Studio 版本上都可用。Fakes 用于支持项目中的单元测试,通过用存根或填充程序替换应用程序的其他部分来帮助您隔离正在测试的代码。更多信息:https ://msdn.microsoft.com/en-us/library/hh549175.aspx
于 2016-01-26T15:53:37.790 回答