Подтвердить что ты не робот

Как получить версию ClickOnce Publish в соответствии с версией файла AssemblyInfo.cs?

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

4b9b3361

Ответ 1

Мы используем Team Team Team Team Build и добавили блок в TFSBuild.proj 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 script), но я бы рекомендовал не развертывать его с машины-разработчика.

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


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

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

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

Ответ 2

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

Просто подумайте о том, как реализовать это с помощью ClickOnce.

Ответ 3

Шаги:

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

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

Ответ 4

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

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