TL; DR Есть ли официальная документация, в которой подробно описано, как работает <private>
/«Копировать локальную» с MSBuild? И какие ценности должны в нее входить?MSBuild ProjectReference: private («Копировать локально») - каковы допустимые значения и поведение?
Когда вы add a project reference из одного проекта в Visual Studio к другому, это добавит <ProjectReference Include=".....csproj">
к MSBuild файла .csproj
.
Когда вы add a file reference от одного проекта в Visual Studio до файла сборки в файловой системе, он добавит <Reference Include="Foo"> <HintPath>....Foo.dll</HintPath> ...
в файл MSBuild .csproj
.
В обоих случаях для Visual Studio Настройка Copy Local = True|False
, будет добавлен подэлемент <Private>True</Private>
или <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
Вы заметите, что
ProjectReference
не документирует в<private>
позицию на всехReference
не указанTrue
илиFalse
как возможные значения.
So. А? Есть ли официальная документация (я буду более чем счастлив с хорошей записью в блоге), которая подробно описывает, как работает опция <private>
? Являются ли документы только мертвыми неправильно или есть что-то еще?
Пример фрагмента из моего VS 2013 Экспресс здесь:
...
<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>
...
интересный пункт (все еще не может найти точный вопрос). Единственное место, которое я нашел, где это частное значение используется, - строка 3612 в Microsoft.Common.Цели: Условие = "'@ (_ MSBuildProjectReferenceExistent)'! = '' и '$ (_ GetChildProjectCopyToOutputDirectoryItems)' == 'true' и '% (_ MSBuildProjectReferenceExistent.Private)'! = 'false' и '$ (UseCommonOutputDirectory)'! = 'true' " –
Или, возможно, эти метаданные также преобразуются в более распространенные« CopyLocal »где-то в задачах MSBuild - не уверен, что я хочу декомпилировать и сканировать их один за другим. В любом случае я согласен - это недокументировано и не так много информации об этом содержится в файлах .targets либо ... –
@AlexeyShcherbak - спасибо за информацию. Я попытался немного отредактировать, так что здесь есть реальный вопрос :-) –