什么是Visual Studio中的内容构建操作?

时间:2014-03-21 07:18:31

标签: visual-studio visual-studio-2012 build buildaction

Visual Studio中的内容构建操作有什么作用?它看起来并没有做任何事情。

MSDN 上的文件属性文章(不再存在)说:

  

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

但我不知道“内容输出组”是什么意思。

这是关于部署的吗?这意味着,在构建时,该操作没有实际效果,但仅在部署后才会生效?

4 个答案:

答案 0 :(得分:27)

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

使用简单的控制台模式项目可以看到的东西。项目+添加新项目,选择位图文件项模板。其Build Action自动设置为“Content”。使用Project + Properties,Publish选项卡,然后单击Application Files按钮。请注意位图如何自动添加到已部署文件列表中:

enter image description here

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

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

答案 1 :(得分:7)

Updated Visual Studio documentation有更有意义的描述:

  

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


经过一些测试和What are the various "Build action" settings in Visual Studio project properties and what do they do?的提示后,我发现 Content 构建操作在WPF项目中也有这种效果(也可能是ASP)。

它添加了

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

WpfApplication1_Content.g.cs。阅读AssemblyAssociatedContentFileAttribute

在控制台或WinForms应用程序中,它不执行任何操作(源代码和输出二进制文件都没有。)

虽然在前面提到的问题的comment中,有关于部署影响的说明:

  

另请注意,使用一键部署时将包含内容,但即使选择了“copy if newer”,None也不会。

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

答案 2 :(得分:4)

我认为这只与C#项目有关。见图:

  

Content

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

我不了解其他构建操作所做的事情,它似乎是一种高级选项。

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

答案 3 :(得分:0)

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