Visual Studio中的内容构建操作有什么作用?它看起来并没有做任何事情。
MSDN 上的文件属性文章(不再存在)说:
内容 - 文件未编译,但包含在内容输出组中。例如,此设置是.htm或其他类型的Web文件的默认值。
但我不知道“内容输出组”是什么意思。
这是关于部署的吗?这意味着,在构建时,该操作没有实际效果,但仅在部署后才会生效?
答案 0 :(得分:27)
“内容”表示它是可部署的项目项,它表示需要将文件复制到目标计算机。
使用简单的控制台模式项目可以看到的东西。项目+添加新项目,选择位图文件项模板。其Build Action自动设置为“Content”。使用Project + Properties,Publish选项卡,然后单击Application Files按钮。请注意位图如何自动添加到已部署文件列表中:
返回“属性”窗口,将其“构建操作”更改为“无”。再次单击该按钮,并注意现在不再包含该文件。
也是由与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#项目有关。见图:
如果您将'复制输出目录'设置为'始终复制'或'复制如果更新'它会将该文件复制到构建时的输出文件夹。按'构建(解决方案)'时执行的操作取决于'构建操作'属性。根据我对Microsoft网站的理解,如果文件是内容文件(如文本,html或其他普通文件),则只复制该文件。
我不了解其他构建操作所做的事情,它似乎是一种高级选项。
底线:它似乎是一个功能,可以帮助您保持文件夹结构和文件组织每个构建,因此它始终可以部署。我希望这可以让你了解这个功能。
答案 3 :(得分:0)
在选中“发布时预编译”的情况下发布到Azure网站时,生成操作为“无”的视图无法在浏览器中解析,并带有预编译错误。一旦将“构建操作”翻转为“内容”并发布后,视图将按预期解决。 不确定如何将100个视图中的2个设置为“无”。