【发布时间】:2012-08-28 00:49:29
【问题描述】:
在我的 Visual Studio 项目中,我有一些文件希望包含在输出中,但没有编译或嵌入。
我知道有两种方法可以做到这一点。
- 将文件的构建操作设置为“内容”
- 将“复制到输出目录”设置为“始终复制”或“如果更新则复制”
谁能告诉我有什么区别以及每个选项适合哪种情况?
【问题讨论】:
在我的 Visual Studio 项目中,我有一些文件希望包含在输出中,但没有编译或嵌入。
我知道有两种方法可以做到这一点。
谁能告诉我有什么区别以及每个选项适合哪种情况?
【问题讨论】:
当将Build Action 设置为Content 时,文件将不会被编译,将被放入内容输出组。
文件是否获得副本取决于当时的Copy to Output Directory 设置。
当然,如果您在文件上设置Copy Always,它可能会被编译并然后被复制。
请参阅 MSDN 上的 File Properties:
内容 - 文件未编译,但包含在内容输出组中。例如,此设置是 .htm 或其他类型的 Web 文件的默认值。
【讨论】:
Content 构建操作在 WPF 项目(可能也是 ASP)中具有明显的效果。
它增加了
[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("filename")]
到WpfApplication1_Content.g.cs。阅读AssemblyAssociatedContentFileAttribute。
在 WinForms 和控制台应用程序(OP 可能正在使用的)中,它不会这样做,因此构建时 None 操作没有区别。
在this comment,我还发现了一条关于对部署的影响的说明:
另请注意,使用一键部署时将包含内容,但即使选择了“如果较新则复制”也不会包含任何内容。
可能这甚至适用于控制台和 WinForms 应用程序(我没有尝试过)。
【讨论】:
即使没有更改任何代码,始终复制也会触发解决方案中该项目的重建。
【讨论】: