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
Вы заметите это,
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>
...
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 и других элементах файла.