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