2012-12-26 11 views
9

Korzystanie msbuild i MSBuild Wspólnoty zadania staram się zrobić coś bardzo proste:Korzystanie XmlUpdate aby ustawić informacje o wersji z zespołu

  1. uzyskać informacje o wersji z zespołu.
  2. Zaktualizuj plik .nuspec, podając informacje o tej wersji.

Moim celem MSBuild wygląda następująco:

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

Problem mam jest to, że zadanie NuGetPack przebiega dwukrotnie: po raz pierwszy, wersja Zgromadzenie brakuje ale ścieżki są poprawne, po raz drugi wersja złożenia jest poprawna, ale brakuje ścieżek!

Oto wynik:

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. 

Próbowałem też za pomocą zadania NuGetPack, ale mam podobne wyniki. Pomoc jest bardzo cenna!

Odpowiedz

10

Wydaje się, że go rozwiązałem, choć nadal nie jestem pewien, dlaczego kod w moim pierwotnym pytaniu nie działa.

Zamiast określania ścieżek poprzez łączenie (np AssemblyFiles = „% (PackageDir.FullPath) \ MyAssembly.dll”) umieścić każdą ścieżkę do własnej pozycji:

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

zrobiłem taką samą zmianę w i wykonał tę samą zmianę w odniesieniach do pliku .nuspec.

Nowy cel Pakiet wygląda następująco:

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

Mam nadzieję, że to pomoże innym!

Powiązane problemy