4

У меня есть решение, которое содержит проект WIX. Я добавил WIX через NuGet несколько месяцев назад, и это версия 3.8.1128.0. Все работает отлично, когда я строю во время моего процесса разработки.Использование NuGet с WIX не работает при создании релиза

Когда я готов к выпуску, я разворачиваю папку в SVN, а затем вытягиваю ветку на свою машину разработки. Когда я открываю решение в ветке, он не может открыть проект WIX. (Это говорит «(загрузка не удалась)» рядом с проектом

При попытке перезагрузить проект из VS, я получаю ошибку

импортируемого проекта «C:. \ Проекты \ ххххх \ ыыыыы \ SolutionName \ packages \ WiX.Toolset.3.8.1128.0 \ tools \ wix \ wwix.targets " не найден. Убедитесь, что путь в объявлении импорта < соответствует и что файл существует на диске.

Я попытался добавить пакет NuGet Wix Toolset (unofficial), но я вижу только 3.9.1208.0 versio n, когда я перехожу на вкладку «Онлайн» в разделе «Управление пакетами NuGet» для решения.

Цель состоит в том, чтобы получить решение, которое включает проекты для двоичного кода и пакета wix msi на сервер сборки, но если я не могу полагаться на NuGet для установки WiX, я не уверен, как это сделать это на другой машине.

ответ

7

Глядя на пакет NuGet набора WiX, он изменяет пути к файлам MSBuild WiX, чтобы файлы MSBuild использовались из пакета NuGet, а не из C:\Program Files\WiX, где они установлены, когда WiX установлен на компьютере. Соответствующие части файла проекта приведены ниже:

<PropertyGroup> 
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath> 
    <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>  
    </PropertyGroup> 

    <PropertyGroup> 
    <WixToolPath>$(SolutionDir)packages\WiX.Toolset.3.8.1128.0\tools\wix\ </WixToolPath> 
    <WixTargetsPath>$(WixToolPath)wix.targets</WixTargetsPath> 
    <WixTasksPath>$(WixToolPath)WixTasks.dll</WixTasksPath> 
    </PropertyGroup> 
    <Import Project="$(WixTargetsPath)" /> 

Поскольку это файл проекта WiX элемент импорта не есть условие, которое проверяет, если WiXTargetsPath существует так Visual Studio не загрузится, если проект Файл Wix.targets отсутствует. К сожалению, добавив условие, как показано ниже, при разрешении Visual Studio загрузить проект не исправляет сборку.

<Import Project="$(WixTargetsPath)" Condition="Exists($(WixTargetsPath))"/> 

С выше условия в файле проекта, то Visual Studio на строительство проекта будет автоматически восстановить пакет WiX NuGet, если у вас есть последняя версия NuGet установлена, но вы все еще получаете сообщение об ошибке сборки об отсутствующей Создайте цель для проекта WiX. Эта ошибка сборки может быть устранена только путем закрытия и повторного открытия решения снова после восстановления пакета WiX NuGet.

На сервере сборки я хотел бы создать стадию предварительной сборки, который восстанавливает пакеты NuGet с помощью NuGet.exe восстановления, прежде чем проект WiX построен:

NuGet.exe restore path\to\the\solution\yoursolution.sln 

Это позволит восстановить пакет WiX. Затем вы можете построить проект WiX без каких-либо ошибок в отношении отсутствующих файлов целей WiX.

Другой способ - проверить каталог пакетов в исходном элементе управления. Однако это добавит двоичные файлы в исходный элемент управления, который вы, возможно, не захотите делать.

Также WiX.Toolset.3.8.1128.0 можно найти на nuget.org, но в диалоговом окне NuGet будет показана последняя версия. Вы можете установить определенные версии пакетов NuGet с помощью консоли диспетчера пакетов. Когда NuGet 3.0 выпущен, вы должны иметь возможность сделать то же самое из диалогового окна NuGet.

+0

Я думал, что причина использования NuGet заключается в том, что вам не нужно иметь специальные скрипты для создания на другой машине. Что именно делает пакет NuGet для WiX? Это просто для интеграции VS? – bpeikes

+1

NuGet автоматически восстанавливает пакеты NuGet, если вы их создаете в Visual Studio. Это не будет сделано на сервере сборки. Для сервера сборки вам нужно будет выполнить шаг предварительной сборки или использовать устаревшее Включить восстановление пакетов, чтобы пакеты были восстановлены. Это работает для большинства пакетов NuGe t. Кажется, что WiX является особым случаем, поскольку файл целей построения используется для определения информации о сборке проекта и не просто расширяет существующий файл целей. –

+1

Пакет WiX NuGet делает проект автономным, поэтому вам не нужно устанавливать WiX отдельно на машине (разработчик или сервер сборки). –