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>
。
Reference
和ProjectReference
似乎被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
你会注意到,
-
ProjectReference
根本不logging<private>
项目 -
Reference
没有列出True
或False
作为可能的值。
所以。 咦? 是否有任何官方文档(我会对一个好的博客条目感到满意),详细描述<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元数据。