【发布时间】:2010-11-06 20:20:45
【问题描述】:
怎么样
<None Include="C:\foo.bar" />
不同于
<Content Include="C:\foo.bar" />
?
【问题讨论】:
-
我将一些
Contents 更改为Nones。我认为在转换为 Razor 时将文件从 .ascx 重命名为 .cshtml 时会发生这种情况。手动更改它们修复了我遇到的一些部署问题。很高兴我找到了这个。
怎么样
<None Include="C:\foo.bar" />
不同于
<Content Include="C:\foo.bar" />
?
【问题讨论】:
Contents 更改为Nones。我认为在转换为 Razor 时将文件从 .ascx 重命名为 .cshtml 时会发生这种情况。手动更改它们修复了我遇到的一些部署问题。很高兴我找到了这个。
关于 build action 属性的 MSDN 文章解释了这些差异。
无 - 该文件不包含在项目输出组中,并且不在构建过程中编译。一个示例是包含文档的文本文件,例如自述文件。
Content - 文件未编译,但包含在 Content 输出组中。例如,此设置是 .htm 或其他类型的 Web 文件的默认值。
【讨论】:
内容文件不包含在构建中,但包含在发布中。
无文件不包含在构建或发布中,除非您以这种方式配置它们。例如,“始终”或“更新”的“复制到输出目录”设置将导致它们同时包含在构建和发布中。
【讨论】:
在我的例子中,.Pubxml 是 None 列表中的文件之一。它不适用于解决方案构建或作为 Web 项目的静态文件。但是要将站点发布到 Azure,配置就存在于此。
根据 Microsoft 文章,这些是我们在 .csproj 文件标签中看到的主要类型:
无 - 文件不包含在项目输出组中,也不包含在 在构建过程中编译。一个示例是一个文本文件,其中包含 文档,例如自述文件。
编译 - 文件被编译到构建输出中。这个设置是 用于代码文件。
内容 - 文件未编译,但包含在内容中 输出组。例如,此设置是一个默认值 .htm 或其他类型的 Web 文件。
嵌入式资源 - 此文件嵌入在主项目构建中 输出为 DLL 或可执行文件。它通常用于资源 文件。
【讨论】:
在我的情况下,我的 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 中混合了 Content 和 None 项目类型元素。这个MSDN article(适用于 Visual Studio 2010)给了我正在寻找的指导:
注意,资源编辑器添加图片时,会设置Build Action 改为 None,因为 .resx 文件引用了图片 文件。在构建时,图像被拉入 .resources 文件 从 .resx 文件中创建。然后可以轻松访问图像 通过为 .resx 文件自动生成的强类型类。 因此,您不应将此设置更改为 嵌入式 资源,因为这样做会在 大会。
解决方案:在此指导下,我使用文本编辑器将 Content 项目类型元素更改为 None。
此外,有关 MSBuild 项目的概述,请参阅MSDN article。
【讨论】:
您需要在模板项目文件中使用 None 来包含您在 .vstemplate 中定义的文件,否则它们会在创建和翻译过程中丢失。它们被留在用于构建所有内容的临时文件夹中,然后很快被删除。
【讨论】:
我有一个不包含可编译项的项目(它存储 html 和 javascript 用于 jasmine 单元测试)。
有一天我的解决方案(包含所述项目)停止编译说“项目中不存在目标“构建”。
我添加了一个导入以引入编译器,它在我的机器上运行良好,但在构建服务器上使用 msbuild 失败。
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
然后我换了一行
<None Include="SpecRunner.html" />
到
<Content Include="SpecRunner.html" />
它也可以在构建服务器上运行。
【讨论】:
我不是 100% 确定(我阅读了 Build Action 属性的 MSDN 描述),但只是将该答案从 MSDN 复制到 StackOverflow 并不能完全回答问题我。
None和Content的区别只对Web项目有影响。对于命令行项目、WinForm 项目或 UnitTest 项目(在我的情况下)等。None 和 Content 没有不同的行为。
MSDN:“项目输出组”或“内容输出组”只是 Web 项目中使用的术语,对吗?
【讨论】:
None 与 Content 似乎只对 publish 步骤而不是 build 步骤有效。对于构建步骤,CopyToOutputDirectory 似乎可以在其中任何一个上设置,并且控制文件是否由构建步骤复制。同样奇怪的是,默认情况下 T4 模板添加为 Content 项目而不是 None 项目。
其中一个区别是它们的发布方式; “无”项不包含在发布中,“内容”项包含;例如,在“发布”选项卡上的“应用程序文件”对话框中。
【讨论】:
CopyToOutputDirectory 设置为 true 它将被发布在 dotnet publish