Минимум развертывания ClickOnce - требуется автоматическое увеличение версии с MSBuild - PullRequest
8 голосов
/ 19 января 2012

В настоящее время мы выполняем сборку / публикацию вручную из Visual Studio 2010, и мы требуем, чтобы пользователи всегда запускали последнюю версию (проверьте перед запуском и установите минимально требуемую версию).Я работаю над созданием сценариев нашего развертывания, и у меня нет проблем с использованием msbuild для сборки / публикации.Тем не менее, я не нашел способа автоматического увеличения минимальной требуемой версии при запуске msbuild.Какие есть варианты автоматического изменения этого параметра при публикации через msbuild?

Я видел довольно много статей по этой теме здесь, но они, похоже, относятся к VS, а не к MSBuild.

Ответы [ 4 ]

11 голосов
/ 07 декабря 2012

Обновление MinimumRequiredVersion Автоматически

Введение в редактор проектов

  1. В обозревателе решений щелкните правой кнопкой мыши свой проект и выберите выгрузить проект.

    Screenshot of Unloading

  2. Как только проект станет недоступным, снова щелкните правой кнопкой мыши и выберите edit <project_name>.<lang> proj.

    Screenshot of Opening Editor

Введение в MSBuild

Свойства используют пары ключ / значение для извлечения информации

  • Используя имя свойства в качестве псевдонима, вы можете использовать $(OutputPath), чтобы получить значение для элемента <OutputPath>.\bin</OutputPath>

Мы будем использовать следующие свойства, созданные для развертывания ClickOnce * В проекте можно указать 1038 *

<MinimumRequiredVersion>1.0.0.6</MinimumRequiredVersion>
<ApplicationRevision>7</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>

MSBuild Tasks (* .proj) и вызывается во время события сборки.

  • FormatVersion - это встроенная задача для .NET 4.0 и более поздних версий, которая форматирует ApplicationVersion и ApplicationRevision вединый номер версии.

Реализация

Скопируйте и вставьте следующий код в открытый файл проекта в качестве дочернего элемента к корневому элементу <Project>.

<Target Name="AutoSetMinimumRequiredVersion" BeforeTargets="GenerateDeploymentManifest">
  <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
    <Output PropertyName="MinimumRequiredVersion" TaskParameter="OutputVersion"  />
  </FormatVersion>
  <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
    <Output PropertyName="_DeploymentBuiltMinimumRequiredVersion" TaskParameter="OutputVersion"  />
  </FormatVersion>
</Target>

Этот код примет ApplicationVersion и ApplicationRevision в качестве параметров в формате Format.Задача версии и сохранит вывод, переписав MinimumRequiredVersion с полной версией публикации.

Сохраните и перезагрузите проект.Каждое развертывание ClickOnce теперь будет автоматически обновляться до последней опубликованной версии.


Большое спасибо Kev за их ответ , который я в основном перефразировалздесь с небольшим количеством добавленных разъяснений для любых начинающих. Вот сообщение в блоге Я сделал о проблеме, которая еще больше раскрывается в моем ответе здесь.

1 голос
/ 10 января 2017

Поскольку вы хотите публиковать с использованием MSBuild, а не Visual Studio, я предполагаю, что вы публикуете с сервера сборки или используете какой-то сценарий. Вы можете использовать сценарий PowerShell Set-ProjectFilesClickOnceVersion *, чтобы установить версию приложения ClickOnce, а также установить минимальную требуемую версию последней версии. Вы хотели бы сделать это перед запуском MSBuild. Мой блог более подробно описывает , как настроить сервер сборки для размещения приложений ClickOnce .

1 голос
/ 05 марта 2012

Я не уверен, что вы идете по этому поводу наилучшим способом.

Я бы рекомендовал использовать сервер непрерывной интеграции (CI), например Team City , который отвечает за развертывание.Если наличие последней версии исходного кода является требованием для публикации, то это, вероятно, то, что вы должны встроить в хорошо протестированную конфигурацию сборки CI и забрать из рук потенциально забывчивых / иногда подверженных ошибкам пользователей.

1 голос
/ 24 января 2012

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

...