2014-10-07 10 views
20

Ich sah dies in einer Projektdatei den anderen Tag:Was bewirkt die private Einstellung für eine ProjectReference in einer MSBuild-Projektdatei?

<ProjectReference Include="Foo\Bar\Baz.csproj"> 
    <Project>{A GUID HERE}</Project> 
    <Name>Baz</Name> 
    <Private>False</Private> <!-- ??? --> 
    <ReferenceOutputAssembly>False</ReferenceOutputAssembly> 
</ProjectReference> 

Jeder Knoten in einem ProjectReference selbsterklärend (die referenzierte Projektdatei, die GUID-Namen zeigen in der Lösung Explorer, und ob oder nicht zu sein scheint das aktuelle Projekt sollte mit dem referenzierten Projekt verlinkt sein) mit Ausnahme von Private, und die Seite Common MSBuild Project Items dokumentiert diesen Wert nicht. (Es gibt eine Private Einstellung für Reference dokumentiert statt ProjectReference - aber es hat Never, Always und PreserveNewest Einstellungen, nicht wahr und falsch)

Was bedeutet diese Einstellung tun?

+1

Soweit MSBuild betrifft, ProjectReference ist Eine Artikelgruppe (dh Liste) und Privat sind Artikelmetadaten für den eingeschlossenen Artikel. Die Antwort auf Ihre Frage liegt darin, was irgendwelche Includes damit tun. Allgemeiner gesagt, um welche Art von Projekt handelt es sich? Markieren Sie Ihre Frage vielleicht mit csharp. –

+0

Ich meinte "Importe" nicht "includes". –

+0

@malexander: Ich denke, deine Antwort war gut, wenn du sie wiederherstellen würdest ... –

Antwort

34

Der Tag Private behält die Benutzerüberschreibung im Feld "Copy Local" im Ordner Visual Studio References bei. Dies steuert, ob die Referenz vom GAC verwendet wird oder ob die referenzierte Assembly in das Build-Verzeichnis kopiert wird.

Während ich keine MSDN-Dokumentation zu diesem Zweck (quelle Überraschung) finden kann, ist es von Verhalten offensichtlich und aus dem Kommentar in Microsoft.Common.CurrentVersion.targets:1620 wo es angewandt wird:

<!-- 
    ============================================================ 

             ResolveAssemblyReferences 

    Given the list of assemblies, find the closure of all assemblies that they depend on. These are 
    what we need to copy to the output directory. 

     [IN] 
     @(Reference) - List of assembly references as fusion names. 
     @(_ResolvedProjectReferencePaths) - List of project references produced by projects that this project depends on. 

      The 'Private' attribute on the reference corresponds to the Copy Local flag in IDE. 
      The 'Private' flag can have three possible values: 
       - 'True' means the reference should be Copied Local 
       - 'False' means the reference should not be Copied Local 
       - [Missing] means this task will decide whether to treat this reference as CopyLocal or not. 

     [OUT] 
     @(ReferencePath) - Paths to resolved primary files. 
     @(ReferenceDependencyPaths) - Paths to resolved dependency files. 
     @(_ReferenceRelatedPaths) - Paths to .xmls and .pdbs. 
     @(ReferenceSatellitePaths) - Paths to satellites. 
     @(_ReferenceSerializationAssemblyPaths) - Paths to XML serialization assemblies created by sgen. 
     @(_ReferenceScatterPaths) - Paths to scatter files. 
     @(ReferenceCopyLocalPaths) - Paths to files that should be copied to the local directory. 
    ============================================================ 
    --> 
Verwandte Themen