在.csproj文件中,<None Include =“…”>代表什么?
怎么
<None Include="C:\foo.bar" />
不同于
<Content Include="C:\foo.bar" />
?
有关构build操作属性的MSDN文章解释了这些差异。
无 – 文件不包含在项目输出组中,不在编译过程中编译。 一个示例是包含文档的文本文件,如自述文件。
内容 – 文件未编译,但包含在“内容”输出组中。 例如,此设置是.htm或其他types的Web文件的默认值。
一个区别是他们如何发表; “无”项目不包含在发布中,“内容”项目包含在内; 例如,在“发布”选项卡上的“应用程序文件”对话框中。
我不是100%确定(我阅读生成操作属性的MSDN说明),但只是从MSDN复制到StackOverflow答案不完全回答这个问题。
“ 无”和“ 内容 ”的区别只对Web项目有影响。 对于命令行项目,WinForm项目或UnitTest项目(在我的情况下)等和None没有任何不同的行为。
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>
当我的项目构build好的时候,这让我想知道为什么我在ItemGroup
混合了Content
和None
项types元素。 这个MSDN文章 (用于Visual Studio 2010)给了我正在寻找的指导:
请注意,资源编辑器添加图像时,会将“ 生成操作”设置为“ 无” ,因为.resx文件会引用图像文件。 在构build时,图像被拖入.resx文件创build的.resources文件中。 然后可以通过为.resx文件自动生成的强types类轻松访问该图像。 因此,您不应将此设置更改为embedded式资源 ,因为这样做会在程序集中包含图像两次。
解决scheme:在此指导下,使用文本编辑器,将“ Content
项types元素更改为“ None
。
此外,有关MSBuild项目的概述,请参阅此MSDN文章 。
我有一个项目,不包含可编译的项目(它存储HTML和JavaScript的茉莉花unit testing)。
有一天,我的解决scheme(包含所述项目)停止编译,说“目标”Build“在项目中不存在”。
我添加了一个导入来引入编译器,在我的机器上工作正常,但在构build服务器上使用msbuild失败。
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
然后我改了一行
<None Include="SpecRunner.html" />
至
<Content Include="SpecRunner.html" />
它也在构build服务器上工作。
在模板项目文件中您需要使用None来包含您在.vstemplate中定义的文件,否则在创build和翻译过程中会丢失它们。 他们留在它用来build立一切,然后不久删除的临时文件夹。