2012-12-26 13 views
9

Mit MSBuild und MSBuild Community-Aufgaben Ich versuche zu setzen bin etwas sehr einfach zu tun:XmlUpdate Verwenden der Versionsinformationen von einem Assembly

  1. Get Versionsinformationen aus einer Baugruppe.
  2. Aktualisieren Sie eine .nuspec-Datei mit dieser Versionsinformation.

Mein MSBuild Ziel sieht wie folgt aus:

<Target Name="Package"> 
    <GetAssemblyIdentity AssemblyFiles="%(PackageDir.FullPath)\MyAssembly.dll"> 
    <Output TaskParameter="Assemblies" ItemName="AssemblyIdentity" /> 
    </GetAssemblyIdentity> 
    <XmlUpdate 
    Prefix="nu" 
    Namespace="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd" 
    XmlFileName="%(PackageDir.FullPath)\MyAssembly.nuspec" 
    XPath="/nu:package/nu:metadata/nu:version" 
    Value="%(AssemblyIdentity.Version)" /> 
</Target> 

Das Problem, das ich habe, ist, dass die NuGetPack Aufgabe läuft ZWEIMAL: Das erste Mal, das Assembly-Version fehlt aber die Wege sind richtig, die Zum zweiten Mal ist die Assembly-Version korrekt, aber die Pfade fehlen! Hier

ist die Ausgabe:

Updating Xml Document "D:\MyProject\package\MyAssembly.nuspec". 
    1 node(s) selected for update. 
    XmlUpdate Wrote: "". 
    Updating Xml Document "\MyAssembly.nuspec". 
D:\MyProject\MyProject.build(64,9): error : Could not find file 
'D:\MyAssembly.nuspec'. 
Done Building Project "D:\MyProject\MyProject.build" (Package target(s) 
) -- FAILED. 

Ich habe auch versucht die NuGetPack Aufgabe mit, bekam aber ähnliche Ergebnisse. Hilfe wird sehr geschätzt!

Antwort

10

Ich habe es gelöst, obwohl ich immer noch nicht sicher bin, warum der Code in meiner ursprünglichen Frage nicht funktioniert.

Stattdessen Wege über Verkettung Angabe (zB AssemblyFiles = "% (PackageDir.FullPath) \ MyAssembly.dll") Ich habe jeden Pfad in seine eigene Position:

<ItemGroup> 
... 
    <PackageVersionAssembly Include=".\build-artifacts\package\MyAssembly.dll"/> 
    <NuSpecFile Include=".\build-artifacts\package\MyAssembly.nuspec"/> 
... 
</ItemGroup> 

habe ich die gleiche Änderung in der Aufgabe und hat die gleiche Änderung an Verweisen auf die .nuspec-Datei vorgenommen.

Das neue Paket Ziel sieht wie folgt aus:

<Target Name="Package"> 
    <GetAssemblyIdentity AssemblyFiles="@(PackageVersionAssembly)"> 
    <Output TaskParameter="Assemblies" ItemName="AssemblyIdentity" /> 
    </GetAssemblyIdentity> 
    <XmlUpdate 
    Prefix="nu" 
    Namespace="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd" 
    XmlFileName="@(NuSpecFile)" 
    XPath="/nu:package/nu:metadata/nu:version" 
    Value="%(AssemblyIdentity.Version)" /> 
</Target> 

Ich hoffe, das hilft anderen!