2012-12-26 12 views
9

Utilizzando MSBuild e MSBuild comunitari I compiti che sto cercando di fare qualcosa di molto semplice:Utilizzando XmlUpdate per impostare informazioni sulla versione da un'Assemblea

  1. Ottenere informazioni sulla versione da un assembly.
  2. Aggiornare un file .nuspec con le informazioni sulla versione.

Il mio obiettivo MSBuild si presenta così:

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

Il problema che sto avendo è che il compito NuGetPack eseguito due volte: la prima volta, la versione Assemblea manca ma i percorsi sono corretti, il la seconda volta la versione dell'Assembly è corretta ma mancano i percorsi!

Ecco l'output:

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. 

Ho provato anche utilizzando l'attività NuGetPack, ma ho ottenuto risultati simili. L'aiuto è molto apprezzato!

risposta

10

Mi sembra di averlo risolto, anche se non sono ancora sicuro del motivo per cui il codice nella mia domanda originale non funziona.

Invece di specificare i percorsi tramite concatenazione (ad es AssemblyFiles = "% (PackageDir.FullPath) \ MyAssembly.dll") Ho messo ogni percorso in un proprio articolo:

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

ho fatto la stessa modifica nel compito e ha apportato la stessa modifica ai riferimenti al file .nuspec.

Il nuovo obiettivo pacchetto assomiglia a questo:

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

Spero che questo aiuta gli altri!

Problemi correlati