MSBuild ProjectReference:private(“Copy Local”) – 允许的值和行为是什么?

TL; DR是否有任何官方文档详细描述了如何在MSBuild中使用<private> /“Copy Local”选项? 那么应该考虑什么样的价值呢?


当您将项目引用从Visual Studio中的一个项目添加到另一个项目时,它将向.csproj MSBuild文件添加<ProjectReference Include=".....csproj">

当您将文件引用从Visual Studio中的一个项目添加到文件系统中的程序集文件时,它将添加<Reference Include="Foo"> <HintPath>....Foo.dll</HintPath> ....csproj MSBuild文件。

这两种情况下,对于Visual Studio设置Copy Local = True|False ,将添加子元素<Private>True</Private><Private>False</Private>

ReferenceProjectReference似乎被logging在Common MSBuild项目项下 :

 <ProjectReference> Represents a reference to another project. Item Name Description ------------------------- Name ... Project ... Package ... <Reference> Represents an assembly (managed) reference in the project. Item Name Description -------------------------- HintPath Optional string. Relative or absolute path of the assembly. Name ... ... Private Optional string. Determines whether to copy the file to the output directory. Values are: 1. Never 2. Always 3. PreserveNewest 

你会注意到,

  1. ProjectReference 根本不logging <private>项目
  2. Reference 没有列出 TrueFalse作为可能的值。

所以。 咦? 是否有任何官方文档(我会对一个好的博客条目感到满意),详细描述<private>选项的工作方式? 文件只是死了错,还是有更多的东西呢?


这里是我的VS 2013 Express示例片段:

 ... <ItemGroup> <Reference Include="ClassLibrary2"> <HintPath>C:\Somewhere\ClassLibrary2.dll</HintPath> <Private>True</Private> </Reference> <Reference Include="System" /> ... <ItemGroup> <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj"> <Project>{861dd746-de2e-4961-94db-4bb5b05effe9}</Project> <Name>ClassLibrary1</Name> <Private>False</Private> </ProjectReference> ... 

对于Reference和ProjectReference项目,可接受的Private值为:True或False

msbuild中的这个属性与VS中的项目引用属性相对应,即复制本地。

我通过在VS中手动设置引用属性并查看xml来获得上述答案。 我找不到私人项目元数据的官方文档。

通过https://msdn.microsoft.com/en-us/library/bb629388.aspx查看文档,将接受的值显示为Never,Always和PreserveNewest。; 这些似乎是错误的,只适用于内容,无和其他文件项目上使用的CopyLocal元数据。