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,
ProjectReference
nicht die<private>
Artikel nicht dokumentiert an allenReference
nicht aufgeführtTrue
oderFalse
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>
...
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' " –
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 ... –
@AlexeyShcherbak - vielen Dank für Ihre Infos. Ich habe versucht, ein bisschen zu bearbeiten, so dass es eine tatsächliche Frage gibt :-) –