【问题标题】:In a .csproj file, what is <None Include="..."> for?在 .csproj 文件中,<None Include="..."> 的用途是什么?
【发布时间】:2010-11-06 20:20:45
【问题描述】:

怎么样

<None Include="C:\foo.bar" />

不同于

<Content Include="C:\foo.bar" />

?

【问题讨论】:

  • 我将一些Contents 更改为Nones。我认为在转换为 Razor 时将文件从 .ascx 重命名为 .cshtml 时会发生这种情况。手动更改它们修复了我遇到的一些部署问题。很高兴我找到了这个。

标签: c# csproj


【解决方案1】:

关于 build action 属性的 MSDN 文章解释了这些差异。

- 该文件不包含在项目输出组中,并且不在构建过程中编译。一个示例是包含文档的文本文件,例如自述文件。

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

【讨论】:

  • 谢谢,我无法找到此参考资料。
  • 有帮助,但是如果文件不包含在输出中,为什么根本没有“无”项?有什么意义?
  • @JimH44 项通常用于专门将文件复制到输出目录中,即使它们默认情况下不在输出组中。如果您为 文件选择“复制到输出目录”->“始终复制”,这将导致它被复制,并且您将看到添加到项目的 .csproj 文件中的条目将具有 条目文件。
  • 那么,带有“复制到输出目录”->“始终复制”的 文件和带有“复制到输出目录”->“始终复制”的 文件有什么区别“?
  • @JimH44 我有一些在部署后过程中执行的 SQL 文件。不需要它们成为构建的一部分,也不需要包含在输出中。我相信这种方法有很多这样的用例。
【解决方案2】:

内容文件不包含在构建中,但包含在发布中。

文件不包含在构建或发布中,除非您以这种方式配置它们。例如,“始终”或“更新”的“复制到输出目录”设置将导致它们同时包含在构建和发布中。

【讨论】:

    【解决方案3】:

    在我的例子中,.PubxmlNone 列表中的文件之一。它不适用于解决方案构建或作为 Web 项目的静态文件。但是要将站点发布到 Azure,配置就存在于此。

    根据 Microsoft 文章,这些是我们在 .csproj 文件标签中看到的主要类型:

    无 - 文件不包含在项目输出组中,也不包含在 在构建过程中编译。一个示例是一个文本文件,其中包含 文档,例如自述文件。

    编译 - 文件被编译到构建输出中。这个设置是 用于代码文件。

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

    嵌入式资源 - 此文件嵌入在主项目构建中 输出为 DLL 或可执行文件。它通常用于资源 文件。

    【讨论】:

    • 请在此处发表评论,如果有误导或不清楚的地方,只是投反对票并不能帮助我更好地改进它。提前致谢。
    • 我经常收到错误:包含“Properties\PublishProfiles\FolderProfile.pubxml”的“无”元素名称应该是“内容”。在我在 Bamboo 上的 Asp.Net 项目中,有时重新运行构建可以修复它,所以不知道究竟是什么问题
    • 嗨@BochenLin,你在这里提到的细节有点少,你能不能试着在这里提供更多细节,或者如果可能的话,发布一个包含完整问题细节和截图的新问题[然后在这里分享问题链接] .
    【解决方案4】:

    在我的情况下,我的 MSBuild 文件有一个 ItemGroup 用于图像资源,如下所示:

      <ItemGroup>
        <Content Include="Resources\image001.png" />
        <Content Include="Resources\image002.png" />
        <Content Include="Resources\image003.png" />
        <Content Include="Resources\image004.png" />
        <None Include="Resources\image005.png" />
        <None Include="Resources\image006.png" />
        <None Include="Resources\image007.png" />
      </ItemGroup>
    

    虽然我的项目构建良好,但这让我想知道为什么我的 ItemGroup 中混合了 ContentNone 项目类型元素。这个MSDN article(适用于 Visual Studio 2010)给了我正在寻找的指导:

    注意,资源编辑器添加图片时,会设置Build Action 改为 None,因为 .resx 文件引用了图片 文件。在构建时,图像被拉入 .resources 文件 从 .resx 文件中创建。然后可以轻松访问图像 通过为 .resx 文件自动生成的强类型类。 因此,您不应将此设置更改为 嵌入式 资源,因为这样做会在 大会。

    解决方案:在此指导下,我使用文本编辑器将 Content 项目类型元素更改为 None

    此外,有关 MSBuild 项目的概述,请参阅MSDN article

    【讨论】:

      【解决方案5】:

      您需要在模板项目文件中使用 None 来包含您在 .vstemplate 中定义的文件,否则它们会在创建和翻译过程中丢失。它们被留在用于构建所有内容的临时文件夹中,然后很快被删除。

      【讨论】:

        【解决方案6】:

        我有一个不包含可编译项的项目(它存储 html 和 javascript 用于 jasmine 单元测试)。

        有一天我的解决方案(包含所述项目)停止编译说“项目中不存在目标“构建”。

        我添加了一个导入以引入编译器,它在我的机器上运行良好,但在构建服务器上使用 msbuild 失败。

        <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
        

        然后我换了一行

        <None Include="SpecRunner.html" />
        

        <Content Include="SpecRunner.html" />
        

        它也可以在构建服务器上运行。

        【讨论】:

          【解决方案7】:

          我不是 100% 确定(我阅读了 Build Action 属性的 MSDN 描述),但只是将该答案从 MSDN 复制到 StackOverflow 并不能完全回答问题我。

          NoneContent的区别只对Web项目有影响。对于命令行项目、WinForm 项目或 UnitTest 项目(在我的情况下)等。NoneContent 没有不同的行为。

          MSDN:“项目输出组”或“内容输出组”只是 Web 项目中使用的术语,对吗?

          【讨论】:

          • 就像你说的,NoneContent 似乎只对 publish 步骤而不是 build 步骤有效。对于构建步骤,CopyToOutputDirectory 似乎可以在其中任何一个上设置,并且控制文件是否由构建步骤复制。同样奇怪的是,默认情况下 T4 模板添加为 Content 项目而不是 None 项目。
          【解决方案8】:

          其中一个区别是它们的发布方式; “无”项不包含在发布中,“内容”项包含;例如,在“发布”选项卡上的“应用程序文件”对话框中。

          【讨论】:

          • 不正确。至少在新的 dot net cli 中。如果您有一个项目声明为 None 并且 CopyToOutputDirectory 设置为 true 它将被发布在 dotnet publish
          猜你喜欢
          • 2018-01-31
          • 2018-03-26
          • 1970-01-01
          • 2020-02-24
          • 2018-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多