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,
ProjectReference
non documenta il<private>
voce a tuttiReference
non elencaTrue
oFalse
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>
...
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' " –
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 ... –
@AlexeyShcherbak - grazie per le vostre informazioni. Ho provato a modificare un po 'in modo che ci sia una domanda reale qui :-) –