Подтвердить что ты не робот

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

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

Вы заметите, что

  • ProjectReference не документирует элемент <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>
...
4b9b3361

Ответ 1

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

Это свойство в msbuild соответствует свойству ссылки на проект в VS как Copy Local.

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

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