Я написал приложение и его установщик WiX и поставил его под контроль версий с помощью Subversion. Когда сборщик установщика WiX собирается, я хочу, чтобы его номер версии был текущей версией сборки приложения. Как мне это сделать? Я использовал c # для кодирования приложения.
NB Я использую ccnet для создания этого проекта
Я сделал это в одном из моих проектов, написав расширение препроцессора для чтения версии файла из моего исполняемого файла. Итак, файл WiX выглядит примерно так:
Я разместил код для в CodePlex: http://wixfileversionext.codeplex.com/
источник
<?define ProductName="!(bind.property.ProductName)" ?><?define CompanyName="!(bind.property.Manufacturer)" ?><?define ProductVersion=!(bind.FileVersion.FileId) ?>
ГдеFileId
значениеId
атрибута одного из вашихFile
элементов внутри aComponent
.В случае, если кто-то ищет реальный пример XML, это работает со сборками .NET (и вам не нужно делать атрибуты Assembly или KeyPath). Я удалил несвязанный код с [...] заполнителями:
источник
!(bind.fileVersion.MyDLL)
она использует 3-ю часть в отношении<File Id="MyDLL"...
разделаВот очень простой способ получить версию Bootstrapper Bundle, соответствующую MyApp AssemblyVersion, используя
BeforeBuild Target
иDefineConstants
.Bundle.wxs:
Bootstrapper.wixproj:
источник
var.ProductName
иvar.BuildVersion
где-то выше своего<Bundle>
?BeforeBuild
цель, поэтому может потребоваться указать явно,AfterTargets="AfterResolveReferences"
если вы создаете в IDEВы можете передать версию скрипту MSBuild для вашего проекта установки так же, как вы можете передать скрипт сборки приложения.
Например, если ваша система CI определяет переменные
AppVersion
иBuildNumber
и передает их в ваши скрипты MSBuild, ваш wixproj может создать соответствующееVersion
свойство, которое он передает в Wix следующим образом:Первое определение
Version
предоставляет значение по умолчанию, когда вы строите локально. Чем бы это ни закончилось, оно становитсяVersion
переменной в Wix. Используйте его в файле wsx следующим образом:Мне нравится включать версию в описание, чтобы ее можно было легко найти в проводнике (как столбец в подробном представлении или на странице свойств) независимо от имени файла.
Передача версии в качестве переменной дает вам больше контроля, чем чтение ее из файла. Когда вы читаете из файла, вы получаете все 4 части программной версии. Однако ProductVersion предназначен только для использования первых 3 частей.
источник
<Version Condition=" '$(BuildVersionOfAsm)' != '' ">$(BuildVersionOfAsm)</Version>
тогда как BuildVersionOfAsm является переменной в конвейерах devops.Это выглядит достаточно близко к тому, что вы пытаетесь достичь. Посмотрите, что эквивалент в круиз-контроль.
http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/
источник