Как получить версию публикации ClickOnce, соответствующую версии файла AssemblyInfo.cs? - PullRequest
30 голосов
/ 04 сентября 2008

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

Ответы [ 4 ]

31 голосов
/ 30 сентября 2008

Мы используем Team Foundation Server Team Build и добавили блок в цель AfterCompile TFSBuild.proj, чтобы вызвать публикацию 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);
}
4 голосов
/ 18 декабря 2008

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

Просто подумайте, когда реализуете что-то подобное с ClickOnce.

2 голосов
/ 30 сентября 2008

Шаги:

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

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

0 голосов
/ 04 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...