Answers:
有关构建操作属性的MSDN文章解释了这些差异。
无 -该文件不包括在项目输出组中,并且在构建过程中未进行编译。一个示例是包含文档的文本文件,例如自述文件。
内容 -该文件未编译,但包含在“内容”输出组中。例如,此设置是.htm或其他类型的Web文件的默认值。
它们的不同之处之一在于它们的发布方式。“无”项不包含在发布中,“内容”项包含在发布中;例如,在“发布”选项卡上的“应用程序文件”对话框上。
CopyToOutputDirectory
设置了true
该项目,则它将在dotnet publish
我不是100%肯定(我读过Build Action属性的MSDN描述),但是仅将该答案从MSDN复制到StackOverflow并不能完全为我回答问题。
“ 无”和“ 内容 ”的区别仅对Web项目有影响。对于命令行项目,WinForm项目或UnitTest项目(在我的情况下)等。None和Content没有不同的行为。
MSDN:“项目输出组”或“内容输出组”仅是Web项目中使用的术语,对吗?
None
vs Content
仅对发布步骤有效,而对构建步骤无效。对于构建步骤,似乎CopyToOutputDirectory
可以在其中之一上进行设置,并控制是否通过构建步骤复制文件。默认情况下,T4模板作为Content
项目而不是作为项目添加,这似乎也很奇怪None
。
在我的情况下,我的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>
当我的项目运行良好时,这让我想知道为什么我的项目中混合了item Content
和None
item类型的元素ItemGroup
。这篇MSDN文章(针对Visual Studio 2010)为我提供了我正在寻找的指导:
请注意,资源编辑器添加图像时,会将Build Action设置为None,因为.resx文件引用该图像文件。在构建时,图像被拉入从.resx文件创建的.resources文件中。然后可以通过为.resx文件自动生成的强类型类轻松访问该图像。因此,您不应将此设置更改为Embedded Resource,因为这样做会在程序集中两次包含映像。
解决方法:在此指导下,使用文本编辑器将Content
项目类型元素更改为None
。
另外,有关MSBuild项目的概述,请参见此MSDN文章。
我有一个项目,其中不包含可编译的项目(它为茉莉花单元测试存储了html和javascript)。
有一天,我的解决方案(包含所述项目)停止编译,并说“项目中不存在目标“ Build””。
我添加了一个导入以引入编译器,该编译器在我的计算机上运行正常,但在构建服务器上使用msbuild失败。
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
然后,我从
<None Include="SpecRunner.html" />
至
<Content Include="SpecRunner.html" />
它也可以在构建服务器上使用。
以我为例,.Pubxml是“ 无”列表中的那些文件之一。它并不用于解决方案构建或用于Web项目的静态文件。但是要将站点发布到Azure,配置已存在。
根据Microsoft的文章,这些是我们在.csproj文件标记中看到的主要类型:
无-该文件不包括在项目输出组中,并且在构建过程中未进行编译。一个示例是包含文档的文本文件,例如自述文件。
编译-文件被编译到构建输出中。此设置用于代码文件。
内容-该文件未编译,但包含在“内容”输出组中。例如,此设置是.htm或其他类型的Web文件的默认值。
嵌入式资源-该文件作为DLL或可执行文件嵌入在主项目构建输出中。它通常用于资源文件。
Content
s更改为None
s。我认为当我将文件从.ascx重命名为.cshtml并转换为Razor时发生了这种情况。手动将其更改回可以解决我遇到的一些部署问题。很高兴我找到了这个。