WiX 3.8 MSI для 32-битной и 64-битной машины

У меня есть Visual Studio 2012, проект установки WiX 3.8 и Записать загрузчик. Все работает нормально, если я нацелен на 32-битную машину. Я хочу создать два отдельных файла MSI для 32-битной и 64-битной версий с локализацией. Но я не могу найти 64-битную целевую опцию в диспетчере конфигурации. Итак, я вручную создал цель x64 и попытался скомпилировать проект установки. Но это полностью не удается. Я не могу включить следующий файл:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">

    <?include $(var.ProjectDir)\Includes\Variables.wxi ?>

    <Fragment>
        <CustomAction somecustomaction />
        ...
        More custom actions...
        ...
    </Fragment>
</Wix>

Я получаю следующую ошибку:

Ошибка 33 Проверка схемы завершилась ошибкой из-за следующей ошибки в строке 1, столбец 206: элемент 'Wix' в пространстве имен 'http://schemas.microsoft.com/wix/2006/wi 'не может содержать текст. Список возможных ожидаемых элементов: 'Bundle Product Module Patch Fragment PatchCreation'. somefile.wxs 2 1 Some.Installer Installer_x64 \ Some.Installer)

Когда я удаляю тег include, он компилируется. Но мне нужно использовать такие директивы include в других файлах, где я ссылаюсь на некоторые переменные. Я действительно не понимаю, в чем проблема. Тег include отлично работает для 32-битной версии, тогда почему он выдает ошибку, если я использую его с 64-битной целью? В чем проблема?

Есть ли лучшие практики для создания настроек для разных платформ? Я также использую загрузчик Burn и локализации для английского и немецкого языков. Я задавал аналогичные вопросы о переполнении стека, но пока безрезультатно.


person jero2rome    schedule 09.01.2014    source источник


Ответы (3)


Ошибка была в файле проекта. В моем меню Сборка -> Диспетчер конфигурации я установил конфигурацию сборки Актив как Release | x64. Однако Visual Studio не изменяет автоматически содержимое файла моего проекта на Release | x64.

Когда я вручную редактировал файл проекта, я изменил платформу на x64, но пропустил изменение конфигурации на Release. Он находился в режиме Debug | x64, и моя установка Visual Studio пыталась скомпилировать в режиме Release | x64. Теперь ошибка устранена, и моя установка компилируется, когда я вручную редактировал файл проекта до Release | x64.

Однако я до сих пор не понимаю, почему Candle.exe дал мне эту ошибку, когда, насколько мне известно, это была проблема Visual Studio 2012. Кто-нибудь поправьте меня, если я ошибаюсь.

person jero2rome    schedule 09.01.2014

У меня почти такая же настройка, как и у вас (WiX 3.8, нацеленная на две разные платформы, включая файл "Variables.wxi", ...), и она работает отлично. Я предполагаю, что что-то не так в вашем Variables.wxi.

Чтобы переключить некоторые значения в зависимости от целевой платформы, используйте переменную $(var.Platform):

<!-- x86 / x64 switch -->
<?if $(var.Platform)=x64 ?>

<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?define Win64 = "yes"?>
<?define ProductName = "Datacard EzPrint Plugin (64 bit)" ?>

<?else ?>

<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?define Win64 = "no"?>
<?define ProductName = "Datacard EzPrint Plugin" ?>

<?endif ?>
person Laurent PerrucheJ    schedule 09.01.2014
comment
На самом деле ошибка проверки схемы выдается Candle.exe. Я попытался прокомментировать содержимое Variables.wxi и дал пустой Variables.wxi. Тем не менее, это вызывает ту же ошибку. Еще одна вещь: я вручную отредактировал файл проекта и изменил платформу на x64. Потому что настройки через VS не отражаются в файле проекта. - person jero2rome; 09.01.2014
comment
Я не обновлял файл проекта WiX. Обновляю свой ответ. - person Laurent PerrucheJ; 09.01.2014

Переместите свой тег Include за пределы тега Wix.

Ошибка сообщает вам о недопустимом содержании внутри тега Wix.

person David Watson    schedule 09.01.2014
comment
Не уверен, почему мой ответ был отклонен, поскольку он объясняет сообщение об ошибке и решает проблему. Команды препроцессора Wix обычно ставятся перед тегом Wix. - person David Watson; 07.01.2016