协慌网

登录 贡献 社区

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 :( 实体框架)用于部署 Entity Framework 工件

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

从文档:

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

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

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

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

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

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 及更高版本,有一个 “阴影” 动作,允许您生成私有访问器,以帮助单元测试私有类。