52

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 

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

  1. ProjectReferenceне документирует в <private> позицию на всех
  2. 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> 
... 
+3

интересный пункт (все еще не может найти точный вопрос). Единственное место, которое я нашел, где это частное значение используется, - строка 3612 в Microsoft.Common.Цели: Условие = "'@ (_ MSBuildProjectReferenceExistent)'! = '' и '$ (_ GetChildProjectCopyToOutputDirectoryItems)' == 'true' и '% (_ MSBuildProjectReferenceExistent.Private)'! = 'false' и '$ (UseCommonOutputDirectory)'! = 'true' " –

+0

Или, возможно, эти метаданные также преобразуются в более распространенные« CopyLocal »где-то в задачах MSBuild - не уверен, что я хочу декомпилировать и сканировать их один за другим. В любом случае я согласен - это недокументировано и не так много информации об этом содержится в файлах .targets либо ... –

+0

@AlexeyShcherbak - спасибо за информацию. Я попытался немного отредактировать, так что здесь есть реальный вопрос :-) –

ответ

17

для справки и ProjectReference пунктов, принятые значения Private являются: Правда или Ложь

Это свойство в MSBuild соответствует свойство ссылки проекта в VS как Копировать локальное.

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

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

Смежные вопросы