MSBuild ProjectReference:private ("Copy Local") - каковы допустимые значения и поведение?

TL;DR. Есть ли официальная документация, которая подробно описывает, как <private> / "Копировать локальный" вариант работает с MSBuild? И какие ценности должны войти в это?


Когда вы добавляете ссылку на проект из одного проекта в Visual Studio в другой, он добавляет <ProjectReference Include=".....csproj"> к .csproj Файл MSBuild.

Когда вы добавляете ссылку на файл из одного проекта в 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 кажется, задокументировано в разделе Общие элементы проекта 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 не документирует <private> Пункт вообще
  2. 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>
...

1 ответ

Для элементов Reference и ProjectReference принимаются следующие значения Private: True или False

Это свойство в msbuild соответствует справочному свойству проекта в VS как Copy Local.

Я получил ответ выше, вручную установив ссылочные свойства в VS и просмотрев xml. Я не смог найти официальную документацию метаданных Личного элемента.

Проверка документов по адресу https://msdn.microsoft.com/en-us/library/bb629388.aspx показывает принятые значения как Никогда, Всегда и PreserveNewest. Кажется, что они неверны и доступны только для метаданных CopyLocal, которые используются в Content, None и других элементах файла.

Другие вопросы по тегам