Как мне получить версию публикации ClickOnce, соответствующую версии файла AssemblyInfo.cs?

StackOverflow https://stackoverflow.com/questions/44470

Вопрос

Каждый раз, когда я публикую приложение в ClickOnce ( Щелчок ) Я получаю get it, чтобы обновить номер редакции на единицу.Есть ли способ получить это изменение автоматически, чтобы изменить номер версии в файле AssemblyInfo.cs (все наши отчеты об ошибках относятся к версии сборки)?

Это было полезно?

Решение

Мы используем Team Foundation Server Team Build и добавили блок в TFSBuild.proj's AfterCompile цель - запустить публикацию ClickOnce с нашим предпочтительным номером версии:

<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj"
         Properties="PublishDir=$(OutDir)\myProjectPublish\;
                     ApplicationVersion=$(PublishApplicationVersion);
                     Configuration=$(Configuration);Platform=$(Platform)"
         Targets="Publish" />

Тот Самый PublishApplicationVersion переменная генерируется пользовательской задачей MSBuild для использования номера набора изменений TFS, но вы могли бы использовать ваша собственная пользовательская задача или существующее решение чтобы получить номер версии из файла AssemblyInfo.

Теоретически это можно было бы сделать в файле вашего проекта (который в любом случае является всего лишь скриптом MSBuild), но я бы не рекомендовал выполнять развертывание с компьютера разработчика.

Я уверен, что другие непрерывная интеграция (CI) решения могут справиться с этим аналогичным образом.


Редактировать: Извините, я перефразировал ваш вопрос.Переход от номера версии ClickOnce к файлу AssemblyInfo должен быть выполнимым.Я уверен, что в задачах сообщества MSBuild (ссылка выше) есть задача для обновления файла AssemblyInfo, поэтому вам просто понадобится пользовательская задача для извлечения номера версии из XML конфигурации ClickOnce.

Однако вы также можете рассмотреть возможность изменения отчета об ошибках, включив в него также версию публикации ClickOnce:

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment.
                                                        CurrentDeployment.CurrentVersion);
}

Другие советы

Я реализовал это недавно, используя некоторые пользовательские задачи.Проблема, которую я обнаружил при реализации этого с помощью ClickOnce, заключается в том, что все ваши DLL-файлы обновлены.Это приводит к тому, что обновление ClickOnce загружает все файлы приложения при каждом обновлении.Это обходит одну из приятных функций развертывания ClickOnce, когда при обновлении повторно загружаются только измененные файлы.

Просто есть о чем подумать при реализации чего-то подобного с помощью ClickOnce.

Шаги:

  1. Используйте внешний увеличивающий номер версии (если вы используете сервер непрерывной интеграции, такой как CruiseControl.NET, тогда он берется из метки сборки).
  2. Используйте GlobalVersionInfo.cs (ссылка на файл, на который ссылаются все проекты в вашем решении), чтобы сохранить текущую версию и обновить ее при сборке с помощью задачи AssemblyInfo из Сообщество MSBuild задачи.
  3. Сценарий Маг инструмент командной строки из .NET SDK для обновления манифеста ClickOnce, используя ту же версию (см. -v и -mv переключатели).

Кстати, приятным бонусом является то, что всякий раз, когда вы автоматически публикуете более новую версию развертывания ClickOnce с помощью сценария интеграции, если вы также укажете минимальную версию для mage.exe (совпадает с версией), тогда каждый пользователь будет автоматически обновлен при следующем запуске приложения.

Вероятно, вам потребуется создать фрагмент кода, который обновляет AssemblyInfo.cs в соответствии с номером версии, хранящимся в файле .csproj.(Версия ClickOnce deploy хранится внутри XML-тега.)

Затем вы изменили бы свой файл .csproj, чтобы запускать этот фрагмент кода при выполнении сборки публикации | выпуска.Сотрудники MSBuild написали в блоге о том, как выполнять пользовательские действия во время определенных типов сборки;проверьте Блог команды MSBuild.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top