52

TL; DR Gibt es eine offizielle Dokumentation, die detailliert beschreibt, wie die <private>/"Copy Local" -Option funktioniert mit MSBuild? Und welche Werte sollen darin eingehen?MSBuild ProjectReference: privat ("Copy Local") - was sind die zulässigen Werte und Verhalten?


Wenn Sie add a project reference von einem Projekt in Visual Studio zum anderen, wird es ein <ProjectReference Include=".....csproj"> zum .csproj MSBuild-Datei.

Wenn Sie add a file reference von einem Projekt in Visual Studio zu einer Baugruppendatei in dem Dateisystem, werden es eine <Reference Include="Foo"> <HintPath>....Foo.dll</HintPath> ... zur .csproj MSBuild-Datei.

In beiden Fälle für die Visual Studio-Einstellung Copy Local = True|False, ein Unterelement <Private>True</Private> oder <Private>False</Private> hinzugefügt werden.

Reference und ProjectReference scheinen unter Common MSBuild Project Items dokumentiert werden:

<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 

Sie werden feststellen, dass,

  1. ProjectReferencenicht die <private> Artikel nicht dokumentiert an allen
  2. Referencenicht aufgeführtTrue oder False als mögliche Werte.

So. Hä? Gibt es eine offizielle Dokumentation (Ich werde mit einem guten Blog-Eintrag mehr als glücklich sein), die im Detail beschrieben, wie die <private> Option funktioniert? Sind die Docs einfach falsch oder gibt es noch etwas anderes?


Beispiel von meinem VS 2013 Express Schnipsel hier:

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

interessanter Punkt (noch nicht finden, was genaue Frage ist). Der einzige Ort, den ich gefunden habe, wo der private Wert verwendet wird, ist Zeile 3612 in Microsoft.Common.Ziele: Bedingung = "'@ (_ MSBuildProjectReferenceExistent)'! = '' und '$ (_ GetChildProjectCopyToOutputDirectoryItems)' == 'true' und '% (_ MSBuildProjectReferenceExistent.Private)'! = 'false' und '$ (UseCommonOutputDirectory)'! = 'true' " –

+0

Oder vielleicht werden diese Metadaten auch in MSBuild-Aufgaben in das häufigere" CopyLocal "umgewandelt - ich bin mir nicht sicher, ob ich sie einzeln dekompilieren und einscannen möchte. Wie auch immer ich stimme zu - es ist undokumentiert und nicht so viel Informationen darüber in .Targets Dateien entweder ... –

+0

@AlexeyShcherbak - vielen Dank für Ihre Infos. Ich habe versucht, ein bisschen zu bearbeiten, so dass es eine tatsächliche Frage gibt :-) –

Antwort

17

Für Referenz- und ProjectReference Artikel, die akzeptierten Werte für Privat sind: Wahr oder Falsch

Diese Eigenschaft in msbuild mit entspricht die Projektreferenzeigenschaft in VS als lokal kopieren.

bekam ich die obige Antwort durch manuell die Referenzeigenschaften in VS Einstellung und die XML anzeigen. Ich konnte keine offizielle Dokumentation der Metadaten des privaten Eintrags finden.

die Dokumentation bei https://msdn.microsoft.com/en-us/library/bb629388.aspx Überprüfung zeigt die zulässigen Werte wie nie, immer, und PreserveNewest. Diese scheinen falsch zu sein und nur für die CopyLocal-Metadaten verfügbar zu sein, die für Content, None und andere Dateielemente verwendet werden.

Verwandte Themen