Visual Studio 中的内容生成操作是什么?

48
在Visual Studio中,“Content”构建操作是做什么的?它看起来好像没做什么。
MSDN上的“文件属性”文章(已不存在)称:
“Content” - 该文件未编译,但包含在内容输出组中。例如,对于 .htm 或其他类型的Web文件,此设置是默认值。
但我不知道“内容输出组”是什么意思。
这是关于部署的问题吗?也就是说,在构建时没有实际效果,只有在稍后部署时才有效?
4个回答

35

“Content”表示可部署的项目项,表明该文件需要复制到目标机器。对于一个简单的控制台模式项目,您可以看到它。 项目+添加新项,选择位图文件项模板。它的Build Action自动设置为“Content”。使用项目+属性,发布选项卡,并单击应用程序文件按钮。请注意,位图自动添加到已部署文件列表中:

enter image description here

返回属性窗口,将其Build Action更改为None。再次单击按钮,注意文件现在不再包括在内。

安装程序实用程序也出于完全相同的原因与VS集成使用它。在Web应用程序中也很重要,通常有许多需要部署到Web服务器的文件。


13

更新后的 Visual Studio 文档 更详细地描述了以下内容:

Content - 标记为Content的文件可以通过调用Application.GetContentStream以流形式检索。对于 ASP.NET 项目,这些文件包括在站点部署时。


此外,在进行一些测试并获得来自Visual Studio 项目属性中各种“构建操作”设置是什么以及它们的作用?的提示后,我发现在 WPF 项目中(可能也适用于 ASP),Content 构建操作会产生这种效果。

它添加了

[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("filename")]

转到 WpfApplication1_Content.g.cs。了解关于AssemblyAssociatedContentFileAttribute的信息。

在控制台或WinForms应用程序中,它不会有任何作用(无论是在源代码还是输出二进制文件中)。

尽管在先前提到的问题的评论中,有一个关于部署影响的说明:

还要注意,使用一键部署时将包括内容,但即使选择“复制如果较新”,“None”也不会包含。

这可能甚至适用于控制台和WinForms应用程序(我没有尝试过)。


4
我认为这仅适用于C#项目。请看下面的图片:
如果你将“复制输出目录”设置为“始终复制”或“仅在更新时复制”,则在构建时会将该文件复制到输出文件夹中。当你按下“生成(解决方案)”时执行的操作取决于“生成操作”属性。根据我对微软网站的理解,如果它是一个类似文本、html或其他普通文件的内容文件,它只会复制该文件。
其他“生成操作”是我不知道的,这似乎是一个高级选项。
总之,它似乎是一个功能,帮助你保持文件夹结构和文件每次构建都是组织良好的,因此可以随时准备部署。我希望这能让你了解这个功能。

谢谢您的回答。我相信在构建时,文件仅基于“复制到输出目录”属性被复制到输出目录中。它不依赖于“生成操作”(即使操作保持默认值“无”,它也会被复制)。它似乎也不依赖于文件类型。任何文件类型,甚至明显非内容类型(如.exe)都会被复制。因此,我认为这并没有回答我的问题。 - Martin Prikryl
1
@Martin Prikryl 这就是 Content 类型的目的。如果您想将其编译成可执行文件,您将需要使用不同的类型。您还可以使用嵌入资源类型,它将文件编译到可执行文件中。 - RB-Develop
我不想将任何东西编译成可执行文件。我只是想问一下,如果我将Build actionNone更改为Content会产生什么影响。 - Martin Prikryl
1
我认为它只是将文件标记为不同类型的处理方式,就像网站上所说的:none 适用于像 readme 这样不属于程序本身的文件。Content 可能会将其标记为程序的一部分,并在某个地方存储引用。目前这是我能想到的最好的解释,如果不够满意,我仍然希望它能以某种方式帮助到您 :-)。 - RB-Develop
谢谢你的努力,但是不行,这并不令人满意 :) 当 Content 被设置时,我没有找到任何参考资料。 - Martin Prikryl

0

当勾选了“发布期间预编译”选项后,将网站发布到 Azure 网站时,Build Action 为“None”的视图在浏览器中无法解析,会出现预编译错误。一旦我将 Build Action 改为“Content”并进行发布,这些视图就能按预期解析。

不确定为什么有 100 个视图中有 2 个被设置为“None”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接