Napisałem aplikację i jej instalator WiX i umieściłem ją pod kontrolą wersji za pomocą subversion. Podczas kompilacji instalatora WiX chcę, aby jego numer wersji był aktualną wersją kompilacji aplikacji. Jak to osiągnąć? Użyłem C # do zakodowania aplikacji.
NB używam ccnet do budowania tego projektu
Zrobiłem to w jednym z moich projektów, pisząc rozszerzenie preprocesora, aby odczytać wersję pliku z mojego pliku wykonywalnego. Więc plik WiX wygląda mniej więcej tak:
Opublikowałem kod w witrynie CodePlex: http://wixfileversionext.codeplex.com/
źródło
<?define ProductName="!(bind.property.ProductName)" ?><?define CompanyName="!(bind.property.Manufacturer)" ?><?define ProductVersion=!(bind.FileVersion.FileId) ?>
GdzieFileId
jest wartośćId
atrybutu jednego z twoichFile
elementów wewnątrzComponent
.Jeśli ktoś szuka rzeczywistego przykładu XML, działa to z zespołami .NET (i nie musisz wykonywać atrybutów Assembly lub KeyPath). Usunąłem niepowiązany kod z [...] posiadaczami miejsc:
źródło
!(bind.fileVersion.MyDLL)
, używa on trzeciej części w odniesieniu do<File Id="MyDLL"...
sekcjiOto bardzo prosty sposób na dopasowanie wersji pakietu Bootstrapper do wersji zestawu MyApp przy użyciu rozszerzenia
BeforeBuild Target
iDefineConstants
.Bundle.wxs:
Bootstrapper.wixproj:
źródło
var.ProductName
ivar.BuildVersion
gdzieś powyżej<Bundle>
?BeforeBuild
cel, więc może być konieczne wyraźne określenie,AfterTargets="AfterResolveReferences"
czy budujesz w IDEWersję można przekazać do skryptu programu MSBuild dla projektu instalacji w taki sam sposób, jak w przypadku skryptu kompilacji aplikacji.
Na przykład, jeśli twój system CI definiuje zmienne
AppVersion
iBuildNumber
przekazuje je do twoich skryptów MSBuild, twój wixproj może stworzyć odpowiedniąVersion
właściwość, którą przekaże do Wix w następujący sposób:Pierwsza definicja
Version
zawiera wartość domyślną podczas tworzenia lokalnego. Cokolwiek się skończy, stanie sięVersion
zmienną w Wix. Użyj go w pliku wsx takim jak ten:Chciałbym dołączyć wersję do opisu, aby można było łatwo wyszukać ją z Eksploratora Windows (jako kolumna w widoku szczegółowym lub na stronie Właściwości) niezależnie od nazwy pliku.
Przekazanie wersji jako zmiennej zapewnia większą kontrolę niż odczytanie jej z pliku. Kiedy czytasz z pliku, otrzymujesz wszystkie 4 części wersji programistycznej. Jednak ProductVersion jest przeznaczony tylko do korzystania z pierwszych 3 części.
źródło
<Version Condition=" '$(BuildVersionOfAsm)' != '' ">$(BuildVersionOfAsm)</Version>
podczas gdy BuildVersionOfAsm jest zmienną w potokach DevOps.Wygląda to dość blisko tego, co próbujesz osiągnąć. Zobacz, co jest odpowiednikiem tempomatu.
http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/
źródło