Как создать новое свойство в MSBuild и ссылаться на него в WIX
Нам нужно создать свойство, чтобы указать версию нашего программного обеспечения. Затем мы хотим использовать его внутри нашего проекта WIX, то есть ссылаться на него в файле wxs. Мы не хотим определять его в файле wxs, потому что мы хотим, чтобы MSBuild также переименовал выходной файл, основываясь на этом номере версии. Определение констант в PropertyGroup не является подходящим местом для нас, и вот причина:
Свойства, определенные в PropertyGroup, зависят от конфигурации / платформы. Всякий раз, когда мы изменяем этот препроцессор в Visual Studio IDE из окна свойств проекта, обычно мы изменяем значение только для определенной комбинации конфигурации / платформы. (Я знаю, что можно изменить его для All Config/Platform в IDE, но на самом деле это делается путем создания копий для всех комбинаций. И все же возможно, что мы испортим синхронизацию, изменив значение только для одной комбинации. Например, по умолчанию, когда мы открываем вкладку сборки окна свойств проекта, он показывает активную конфигурацию / платформу). С другой стороны, даже несмотря на то, что мы можем определить PropertyGroup без каких-либо условий, всякий раз, когда мы изменяем его в IDE, мы обычно модифицируем его только для конкретной комбинации, а не для всех. Поскольку мы просто создаем наше ПО в VS IDE, его будет сложно поддерживать и подвержено проблемам.
Я пытался использовать задачу CreateProperty MSBuild внутри цели BeforeBuild, но, похоже, в следующем исполнении значение не будет эффективным вообще. Например, если я перезаписываю существующее свойство в BeforeBuild, и когда я ссылаюсь на него в WIX, оно все равно будет использовать старое значение. И если я создаю совершенно новое свойство, WIX жалуется на неопределенный препроцессор.
Есть ли правильный способ сделать это: создать свойство MSBuild и использовать его внутри WIX?
2 ответа
Вам не нужно использовать BeforeBuild. Это определенно работает на wixproj.
my.properties
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<DefineConstants>$(DefineConstants);foo=bar</DefineConstants>
</PropertyGroup>
</Project>
обновлен wixproj
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- all other stuff -->
<Import Project="my.properties" />
</Project>
Wix
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SetupProject1$(var.foo)" Language="1033" Version="1.0.0.0" Manufacturer="$(var.foo)" UpgradeCode="863d8da1-422b-4b28-aa68-56e3190770d7">
Пожалуйста, проверьте переменные препроцессора здесь. На самом деле я не уверен, что вы можете ссылаться на свойства проекта, отличные от стандартных, но похоже, что это возможно.