45

What does the Content Build Action in Visual Studio do? It does not look like it's doing anything.

The File Properties article on MSDN (does not exist anymore) says:

Content - The file is not compiled, but is included in the Content output group. For example, this setting is the default value for an .htm or other kind of Web file.

But I have no idea what the "Content output group" means.

Is this something about deployment? Meaning, the action has no actual effect, when building, but only later when deploying?

4

4 回答 4

33

“内容”表示它是一个可部署的项目项,它表示需要将文件复制到目标机器。

您可以通过简单的控制台模式项目看到一些东西。项目 + 添加新项目,选择位图文件项目模板。它的构建操作自动设置为“内容”。使用 Project + Properties,Publish 选项卡并单击 Application Files 按钮。请注意位图是如何自动添加到已部署文件列表中的:

在此处输入图像描述

返回“属性”窗口并将其“构建操作”更改为“无”。再次单击该按钮并注意该文件现在如何不再包含在内。

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

于 2014-03-31T16:21:18.367 回答
11

更新的 Visual Studio 文档有更有意义的描述:

内容-可以通过调用Application.GetContentStream将标记为内容的文件作为流检索。对于 ASP.NET 项目,这些文件在部署时作为站点的一部分包含在内。


同样经过一些测试并得到Visual Studio 项目属性中的各种“构建操作”设置的提示以及它们的作用?,我发现内容构建操作在 WPF 项目中具有这种效果(可能也是 ASP)。

它增加了

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

WpfApplication1_Content.g.cs. 阅读有关AssemblyAssociatedContentFileAttribute.

在控制台或 WinForms 应用程序中,它不做任何事情(在源代码中也不输出二进制文件)。

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

另请注意,使用一键式部署时将包含内容,但即使选择了“如果较新则复制”也不会包含内容。

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

于 2014-03-28T06:22:16.497 回答
4

我认为这仅与 C# 项目有关。看图片:

内容

如果您将“复制输出目录”设置为“始终复制”“如果较新则复制”,它将在构建时将该文件复制到输出文件夹。当您按下“构建(解决方案)”时执行的操作取决于“构建操作”属性。根据我对 Microsoft 网站的了解,如果它是文本、html 或其他普通文件等内容文件,它只会复制文件。

我不知道其他构建操作的作用,这似乎是一个高级选项。

底线:它似乎是一个功能,可以帮助您在每次构建时保持文件夹结构和文件的组织,因此它始终可以部署。我希望这能让您对该功能有所了解。

于 2014-03-26T15:27:14.817 回答
0

在选中“发布期间预编译”的情况下发布到 Azure 网站时,构建操作为“无”的视图无法在浏览器中解析,并出现预编译错误。一旦我将构建操作翻转到“内容”并发布,视图就会按预期解决。不确定 100 个视图中的 2 个如何设置为“无”。

于 2020-10-28T13:16:02.743 回答