在一个. csproj 文件中,< None Include e = “ ...”> 的用途是什么?

怎么样

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

不同于

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

77922 次浏览

一个区别在于它们是如何发布的; “ Nothing”项不包含在发布中,而“ Content”项包含在发布中; 例如,在“发布”选项卡上的“ Application Files”对话框中。

关于 建立行动属性的 MSDN 文章解释了这些差异。

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

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

我不是100% 肯定(我阅读了 MSDN 对 构建操作属性的描述) ,但只是将这个答案从 MSDN 复制到 StackOverflow 堆栈溢出对我来说并不能完全回答这个问题。

没有内容的区别只对 Web 项目有影响。对于命令行项目、 WinForm 项目或 UnitTest 项目(在本例中)等。没有内容没有不同的行为。

MSDN: “项目输出组”或“内容输出组”仅在 Web 项目中使用,对吗?

我有一个项目,不包含可编译的项目(它存储 html 和 javascript 的茉莉花单元测试)。

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

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

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

然后我改了一行

<None Include="SpecRunner.html" />

<Content Include="SpecRunner.html" />

它在构建服务器上也能工作。

模板项目文件中必须有“无”才能包含在。否则它们将在创建和翻译过程中丢失。它们被留在用于构建所有内容的临时文件夹中,然后很快就被删除。

在我的情况下,我的 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>

虽然我的项目是构建良好的,这让我想知道为什么我有一个混合的 ContentNone项目类型的元素在我的 ItemGroup。这个 MSDN 文章(用于 Visual Studio 2010)给了我我想要的指导:

注意,当资源编辑器添加一个图像时,它设置 < strong > Build 对 没有执行 操作,因为. resx 文件引用该图像 在构建时,映像被拉入到.resources 文件中 用. resx 文件创建。然后可以很容易地访问图像 通过为. resx 文件自动生成的强类型类。 因此,不应将此设置更改为 < strong >  嵌入 Resource ,因为这样做会在 集会。

解决方案: 有了这个指导,我使用一个文本编辑器将 Content项目类型元素更改为 None

此外,有关 MSBuild 项的概述,请参见此 MSDN 文章

在我的例子中,。 Pubxml没有列表中的一个文件。它不意味着解决方案建设或作为一个静态文件的网络项目。但是要将站点发布到 Azure,配置就在这里。

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

None-该文件不包含在项目输出组中,也不包含在项目输出组中 例如,一个文本文件包含 文档,如自述文件。

编译-文件被编译到生成输出中。此设置为 用于代码文件。

Content-不编译文件,但包含在 Content 中 例如,此设置是 . htm 或其他类型的 Web 文件。

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

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

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