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>
...
Ответы
Ответ 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, которые используются в Контенте, Нет и других файлах.