【问题标题】:What is Content Build Action in Visual Studio?Visual Studio 中的内容构建操作是什么?
【发布时间】:2014-04-28 10:56:52
【问题描述】:

Visual Studio 中的 Content 构建操作有什么作用?它看起来不像在做任何事情。

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

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

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

这与部署有关吗?意思是,该操作在构建时没有实际效果,但只有在稍后部署时才起作用?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      Content - 标记为 Content 的文件可以通过调用 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 中,对于前面提到的问题,有一条关于对部署的影响的说明:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

        • 感谢您的回答。我相信在构建时,文件仅根据 Copy to output directory 属性复制到输出目录。它不依赖于 Build action(即使该操作保持为默认 None 也会被复制)。它似乎也不依赖于文件类型。任何文件类型,甚至是明显的非内容类型(如.exe)都会被复制。所以我认为这不能回答我的问题。
        • @Martin Prikryl 这就是 Content 类型的意图。如果要将其编译为可执行文件,则必须使用不同的类型。您还可以使用嵌入式资源类型,它将文件编译成可执行文件。
        • 我不想将任何东西编译成可执行文件。我只是想问如果我将 Build actionNone 更改为 Content 会有什么影响。
        • 我认为它只是将文件标记为进行不同类型的处理,正如网站所说:none 是针对不属于程序本身的自述文件之类的文件。内容可能会将其标记为程序的一部分并在某处存储参考。这是 - 目前 - 我能想到的最好的,如果它不令人满意,我仍然希望它在某种程度上有所帮助:-)。
        • 感谢您的努力,但不,这并不令人满意 :) 当设置为 Content 时,我没有找到任何类型的参考。
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2010-09-13
          • 1970-01-01
          • 1970-01-01
          • 2012-08-28
          • 1970-01-01
          • 2015-07-10
          • 1970-01-01
          • 2011-05-23
          • 2011-11-17
          相关资源
          最近更新 更多