ChatGPT解决这个技术问题 Extra ChatGPT

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

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


C
Callum Watkins

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

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

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

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

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

页面(仅限 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 文件


“DesignData”用于“Blendability”,允许您添加基于 WPF 标记的数据,即,当应用正确的设置时,然后在设计时显示。
另请注意,使用一键部署时将包含内容,但即使选择“如果较新则复制”也不会包含内容。
Fakes、CodeAnalysisDictionary 和 XamlAppRef 呢?
AdditionalFiles 呢?我在 VS 2015 中看到它,但找不到参考。
指出您可以自定义自己的构建操作也很有用:blogs.msdn.microsoft.com/msbuild/2005/10/06/…
P
Paul Batum

从文档中:

BuildAction 属性指示在执行构建时 Visual Studio 对文件执行的操作。 BuildAction 可以有以下几个值之一: None - 文件不包含在项目输出组中,并且不在构建过程中编译。一个示例是包含文档的文本文件,例如自述文件。编译 - 文件被编译到构建输出中。此设置用于代码文件。内容 - 文件未编译,但包含在内容输出组中。例如,此设置是 .htm 或其他类型的 Web 文件的默认值。嵌入式资源 - 此文件作为 DLL 或可执行文件嵌入到主项目构建输出中。它通常用于资源文件。


有趣的!我安装了 VS2008,我想知道为什么它们没有出现在我的文档中?
PRI 资源呢?
@PaulBatum 您可以插入此引用定义的参考吗?
@Raymond 232:引用的定义是什么?
@PaulBatum:是的,确实参考会很好。答案以“来自文档”开头,因此将不胜感激此文档的链接。
D
Dominic Hopton

页面——获取指定的 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 及更高版本,有一个“影子”操作允许您生成私有访问器来帮助对私有类进行单元测试。


我希望您不介意我将您的部分答案复制到 Gishu 的答案中,以获得更完整的参考答案。
G
Gerard ONeill

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

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

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

G。


谢谢你。但是,我对如何/在何处执行此操作有些困惑。理想情况下,我只想“包含”我的“上传”文件夹,所有子文件都将包含在发布中。
这适用于对象资源管理器中单个项目的属性,当您选择一个项目或右键单击并选择属性时,您将在属性选项卡中看到这些属性。对于您想要的,我认为您只需在右键单击项目时添加现有项目。顺便说一句,添加现有项目对话框的保存按钮有一个下拉菜单,可让您将其添加为链接。您可能仍然需要在文件夹中添加项目。
a
akjoshi

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


D
Drew Noakes

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

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

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

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

您还可以通过 AvailableItemName 在您的项目中为您自己的目的define your own item types。例如:

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

这样做会产生:

https://i.stack.imgur.com/2Vud0.png


P
Per Lundberg

来自 Microsoft Connect(解释 DesignData 和 DesignDataWithDesignTimeCreatableTypes)类型的 this page 怎么样。报价:

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

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

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

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

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


答案中的第一个链接已过时 - “Microsoft Connect 已停用”。
J
Jorge Garcia

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