Как я могу заставить MSBuild увеличить номер версии редакции ClickOnce-публикации на сервере сборки? - PullRequest
8 голосов
/ 13 декабря 2011

У нас есть сценарий NAnt , который извлекает из CVS , а затем запускает MSBuild для публикации приложения.Проблема в том, что мы должны помнить, что всегда нужно увеличивать версию в Visual Studio.

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

Есть ли простой способ сделать это?

Ответы [ 3 ]

10 голосов
/ 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 за их ответ , который я в основном перефразировалздесь с небольшим количеством добавленных разъяснений для любых начинающих. Вот сообщение в блоге Я сделал о проблеме, которая еще больше раскрывается в моем ответе здесь.

2 голосов
/ 19 февраля 2013

В конце концов я сделал это с помощью NAnt xmlpoke, поэтому для версии мы получили 20.0.dayofyear.hourminute - она ​​в основном уникальна для всех сборок.

Там нет необходимости для пользовательских задач - и более новая версия MSBuild также имеет pokexml, так что он может работать с этим.

<target name="pokerevision" depends="init">
    <property name="projectname" value="MyProject.GUI" />

    <!-- This is a bit flawed because 231 could mean 02:31 or 23:01, but we never build before 3 am. -->
    <property
        name="app.revision"
        value="${datetime::get-hour(datetime::now())}${datetime::get-minute(datetime::now())}" />

    <echo message="revision: ${app.revision}" />

    <xmlpoke
        file="${Solution.Path}\${projectname}\${projectname}.csproj"
        xpath="//x:Project/x:PropertyGroup[1]/x:ApplicationRevision"
        value="${app.revision}"
    >
        <namespaces>
            <namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
        </namespaces>
    </xmlpoke>

    <property
        name="app.version"
        value="20.0.${datetime::get-day-of-year(datetime::now())}.${app.revision}" />

    <echo message="version: ${app.version}" />

    <xmlpoke
        file="${Solution.Path}\${projectname}\${projectname}.csproj"
        xpath="//x:Project/x:PropertyGroup[1]/x:ApplicationVersion"
        value="${app.version}"
    >
        <namespaces>
            <namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
        </namespaces>
    </xmlpoke>
</target>
1 голос
/ 13 декабря 2011

У вас есть несколько вариантов, вот два:

  1. Укажите звездочку вместо номера версии сборки, чтобы он автоматически увеличивался
    http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx

    [сборка: AssemblyVersion ("1.0. *")]

  2. Используйте задачу AsssemblyInfo msbuild из пакета расширений MSBuild.
    http://msbuildextensionpack.codeplex.com
    Пример:
    http://www.msbuildextensionpack.com/help/4.0.4.0/html/d6c3b5e8-00d4-c826-1a73-3cfe637f3827.htm

Редактировать
Извините, я неправильно понял ваш вопрос.

Смотрите принятый ответ Джейсона Стангрума здесь:
Как получить версию публикации ClickOnce, соответствующую версии файла AssemblyInfo.cs?

...