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

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

答案

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

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

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

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

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

  • Page (仅限 WPF) :用于将xaml文件编译为baml 。然后使用与Resource相同的技术嵌入baml (即,可以通过 `AppName.g.resources 获得)

  • ApplicationDefinition (仅 WPF) :标记定义您的应用程序的 XAML / 类文件。您可以使用 x:Class =“Namespace.ClassName” 指定背后的代码,并使用 StartupUri =“Window1.xaml” 设置启动表单 / 页面

  • SplashScreen (仅 WPF)加载 WPF 应用程序然后淡出时,会自动显示标记为SplashScreen的图像

  • DesignData :编译 XAML 视图模型,以便可以在 Visual Studio 中使用示例数据预览用户控件(使用模拟类型)

  • DesignDataWithDesignTimeCreatableTypes :编译 XAML 视图模型,以便可以在 Visual Studio 中使用示例数据预览用户控件(使用实际类型)

  • EntityDeploy :( 实体框架)用于部署实体框架工件

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

从文档中:

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

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

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

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

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

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

ApplicationDefinition - 与 Page 相似,不同之处在于它一步一步地运行,并定义了应用程序的入口点,该入口点将实例化您的应用程序对象,在其上调用运行,然后将实例化 StartupUri 属性设置的类型,并提供主窗口。

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

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

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

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

G。

在 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)。

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

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

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

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

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

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

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