Комплект WiX для установки .NET

Я пытаюсь создать пакет для установки .NET Framework 4.0, если он должен быть установлен. Я понимаю, что есть похожие вопросы, но все ответы - это просто фрагменты и не описывают, в какой файл они входят, и как они импортируются в файл .wxs.

Это то, что у меня есть в файле Bundle.wxs. Я получаю предупреждения компилятора о нескольких разделах ввода.

Ошибка 2 Найдено несколько разделов ввода {CF06625F-7B6B-4B6E-A24E-FDDCA7CFFFF4} 'и' {0D1EE60A-FC4F-4083-8B1E-311E75A67B4C} '. В одной цели может присутствовать только одна секция ввода.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle UpgradeCode="{C6FF478E-C3DA-4D78-929D-24C3F3307356}" Version="4.0">
    <Chain>
      <PackageGroupRef Id="NetFx40Redist"/>
    </Chain>
  </Bundle>
</Wix>

Большинство ссылок на странице WiX сломаны и ничего не упоминают об атрибутах, которые нужно использовать в теге Bundle, и, по-видимому, меняют пакет/продукт. Я не мог найти упоминания на страницах Wix об установке GUID для Bundles. Это что-то новое для Wix 3.7?

http://wix.sourceforge.net/manual-wix3/install_dotnet.htm

  • Как использовать предопределенный .NET 4.0 PackageGroupRef/PayloadGroupRef
  • Должно ли это быть в Bundle.wxs? Где он импортируется в мой основной Product.wxs?

Ответы

Ответ 1

Эта ошибка указывает, что ваш проект строится с файлами, которые содержат более одного из этих элементов: Product, Module, Patch, PatchCreation, Bundle. В вашем случае кажется, что вы добавили файл с элементом Bundle в проект, у которого уже был элемент Product. Это не поддерживается в наборе инструментов WiX сегодня. Вы должны поместить элемент Bundle в отдельный проект.

Таким образом, при создании bootstrapper и MSI у вас будет два файла .wixproj. Первый .wixproj будет содержать вашу информацию Product. Второй .wixproj будет содержать вашу информацию Bundle и иметь ссылку на проект на первый .wixproj, чтобы порядок сборки был правильным.

Ответ 2

Элемент Wix/Bundle является корнем проекта Bootstrapper. Он не входит в тот же проект, что и ваш Product.wxs. В Visual Studio существует шаблон для новых проектов Wix Bootstrapper. Вероятно, вы его еще не создали.

Тогда в вашей цепочке пакетов вам понадобится .NET и ваше приложение MSI, как в примере. Чтобы использовать NetFx40Web, вам нужно ссылаться на WixNetfxExtension. Проекты Wix, которые ссылаются на другие проекты Wix, имеют предопределенные переменные, поэтому вы можете использовать их свойства, такие как TargetPath. В примере предполагается, что этот проект Bootstrapper ссылается на проект установки под названием MyApplicationSetup.

<Chain>
    <PackageGroupRef Id="NetFx40Web"/>
    <MsiPackage Id="MyApplication" SourceFile="$(var.MyApplicationSetup.TargetPath)"/>
</Chain>