52

TL; DR Esiste qualche documentazione ufficiale che descrive in dettaglio come l'opzione <private>/"Copia locale" funzioni con MSBuild? E quali valori dovrebbero esserci?MSBuild ProjectRiferimento: privato ("Copia locale") - quali sono i valori consentiti e il comportamento?


Quando si add a project reference da un progetto in Visual Studio ad un altro, si aggiungerà un <ProjectReference Include=".....csproj"> al file .csproj MSBuild.

Quando si add a file reference da un progetto in Visual Studio a un file di assieme nel file system, verrà aggiunto un file <Reference Include="Foo"> <HintPath>....Foo.dll</HintPath> ... al file .csproj MSBuild.

In entrambi i i casi, per il Visual Studio Impostazione Copy Local = True|False, verrà aggiunto un sub-elemento <Private>True</Private> o <Private>False</Private>.

Reference e ProjectReference sembrano essere documentati in 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 

Si noterà che,

  1. ProjectReferencenon documenta il <private> voce a tutti
  2. Referencenon elencaTrue o False come valori possibili.

Così. Eh? C'è qualche documentazione ufficiale (sarò più che felice con un buon blog) che descrive in dettaglio come funziona l'opzione <private>? I documenti sono semplicemente sbagliati o c'è qualcosa di più?


Esempio frammento dal mio VS 2013 espresso qui:

... 
    <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

punto interessante (non riesco ancora a trovare la domanda esatta). L'unico posto che ho trovato, in cui viene utilizzato quel valore privato è la riga 3612 in Microsoft.Common.target: Condition = "'@ (_ MSBuildProjectReferenceExistent)'! = '' e '$ (_ GetChildProjectCopyToOutputDirectoryItems)' == 'true' e '% (_ MSBuildProjectReferenceExistent.Private)'! = 'false' e '$ (UseCommonOutputDirectory)'! = 'true' " –

+0

O forse questi metadati vengono anche trasformati in" CopyLocal "più comune da qualche parte nelle attività di MSBuild - non sono sicuro di voler decompilare e scansionarli uno per uno. In ogni caso sono d'accordo - non è documentato e non tanto le informazioni su di esso sono fornite nei file .targets ... –

+0

@AlexeyShcherbak - grazie per le vostre informazioni. Ho provato a modificare un po 'in modo che ci sia una domanda reale qui :-) –

risposta

17

Per gli elementi di riferimento e ProjectReference, i valori accettati per Private sono: Vero o Falso

La struttura, situata a msbuild corrisponde la proprietà di riferimento del progetto in VS come Copia locale.

Ho ottenuto la risposta di cui sopra impostando manualmente le proprietà di riferimento in VS e visualizzando l'xml. Non sono riuscito a trovare la documentazione ufficiale dei metadati dell'oggetto privato.

Il controllo dei documenti a https://msdn.microsoft.com/en-us/library/bb629388.aspx mostra i valori accettati Mai, Sempre e PreservaNewest. Questi sembrano essere sbagliati e disponibili solo per i metadati CopyLocal, che vengono utilizzati su Contenuto, Nessuno e altri file.

Problemi correlati