WIX 3.0 Создание функций из проектов .NET - PullRequest
2 голосов
/ 11 ноября 2009

У меня есть большое дерево исходников .NET (185 проектов на C # и VB, из которых 60 - приложения или веб-сайты), для которых я хочу создать настройку wix. Общая идея состоит в том, чтобы иметь 1 установочный msi и сделать каждый исполняемый файл функцией, и чтобы каждое приложение было установлено в отдельном каталоге. как

%progfiles%/company/app1
                   /app2
                   /app3

До сих пор мне удалось создать файл продукта wix с деревом функций и получить инструмент высокой температуры для генерации файлов фрагментов для каждого проекта .NET. Они выглядят так:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
    <DirectoryRef Id="Client.Binaries">
        ...component definitions...
    </DirectoryRef>
    <DirectoryRef Id="Client.Content">
        ...etc... 
    </DirectoryRef>
</Fragment>
<Fragment>
    <ComponentGroup Id="Client.Binaries">
       ...ComponentRefs referencing components defined under 
          the DirectoryRef with the same id...
    </ComponentGroup>
    ...etc... 

Однако связь этих двух причиняет мне неприятности, Функции могут ссылаться на ComponentGroups, ComponentGroups ссылки на компоненты, Компоненты содержатся в DirectoryRef.

Определение элементов Directory, на которые должны ссылаться элементы DirectoryRef, вызывает у меня затруднения.

Некоторые библиотеки используются несколькими приложениями, поэтому DirectoryRef должен указывать на несколько каталогов, и несколько DirectoryRef (с разными идентификаторами) должны указывать на один и тот же каталог () Обнаружение псевдонима каталога ), оба из которых кажутся невозможными.

У меня сложилось четкое впечатление, что я поступаю неправильно или что мне не хватает более глубокого понимания. (Не удивительно, так как моему wix-фу уже целых 3 дня)

Может ли кто-нибудь просветить меня, как зажечь свечу в этой темной и злой проблеме (не каламбур ...)

1 Ответ

0 голосов
/ 12 ноября 2009

Невозможно установить один и тот же компонент в разные места, если вы используете только один MSI. Вы можете создать несколько компонентов для одного и того же файла, но это немного уродливо и головной болью обслуживания.

Лучшим подходом является установка общих файлов только один раз. В случае общих сборок .NET это означает, что вы должны поместить их в глобальный кеш сборок .NET (GAC). Вам нужно сделать две вещи для каждой общей сборки:

  1. дать сборке строгое название подписание это; в Visual Studio Вы можете просто включить «Подписать Сборка »и создайте новый файл ключа из проекта Настройки.
  2. в исходном файле wix добавьте атрибут Assembly=".net" к Элемент файла

Как только сборка зарегистрирована в GAC, она может быть загружена любым вашим приложением.

...