【问题标题】:What's the difference between Content and None when "Always copy to output directory" is set?设置“始终复制到输出目录”时,Content 和 None 有什么区别?
【发布时间】:2017-06-04 21:47:58
【问题描述】:

在 csproj 文件中,我们可以使用 NoneContent 元素包含文件。来自 MSDN,它说:

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

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

但是由于NoneContent 元素都可以包含CopyToOutputDirectory 元素,因此我想知道我是否将其设置为AlwaysNoneContent 的行为不会是一样吗?

【问题讨论】:

  • 在构建 msi/setup 项目时,您可以在构建中包含不同的文件类型并为它们指定不同的位置。即,您可以指定将Content 文件放置在特定文件夹中。请注意,这并不能回答您的问题,而是指出文件类型也可以/被其他工具使用。

标签: c# .net visual-studio msbuild


【解决方案1】:

并非所有通过设置CopyToOutputDirectory 复制到您的输出目录的内容都会复制到内容输出组。因此,您可以这样做:

File1---CopyToOutputDirectory = Copy always, Content 
File2---CopyToOutputDirectory = Copy always, Content 
File3---CopyToOutputDirectory = Copy always, None

所有三个文件都将被复制到输出目录,但只有File1File2 将被复制到内容输出组

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

NoneContent文件如何与构建和部署过程相关的值。因此,您的构建(例如 MS Build)和部署可能与简单地采用非常不同输出目录中的文件。您可能在输出目录中有一个您并不真正需要的 .bat 文件,但部署时需要它。

This SO answer 提供了有关不同构建操作的更多详细信息。

【讨论】:

  • 为什么将File1File2 添加到您的答案中?似乎只有其中一个就足够了。我在这里错过了什么吗?
  • 我发现的一个明显区别是它们何时发布:“无”项目不包含在发布文件夹中,“内容”项目包含。它只发生在某些项目类型中。例如:.net 框架 WebAPI 应用程序、.net 框架控制台应用程序)。但是,.net 核心 WebAPI 应用程序并非如此。
  • @KevinXiong 这是一个很好的解释。已发布的项目进入“应用程序”,但没有项目只显示用于测试。也许这就是内容输出组。
猜你喜欢
  • 2016-08-24
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 2014-02-23
  • 2022-12-18
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多