61

TL;DR是否有任何官方文档详细描述<private>/“复制本地”选项如何与 MSBuild 一起使用?应该包含哪些价值观?


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

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

这两种情况下,对于 Visual Studio Setting ,都会添加Copy Local = True|False一个子元素<Private>True</Private>or 。<Private>False</Private>

Reference并且ProjectReference似乎记录在Common MSBuild Project Items下:

<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 根本不记录<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>
...
4

1 回答 1

21

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

msbuild 中的这个属性对应 VS 中的项目引用属性为 Copy Local。

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

检查https://msdn.microsoft.com/en-us/library/bb629388.aspx上的文档将接受的值显示为 Never、Always 和 PreserveNewest。这些似乎是错误的,仅适用于 CopyLocal 元数据,该元数据用于 Content、None 和其他文件项。

于 2015-04-17T19:03:46.187 回答