VS2012 — синхронизация свойств проекта и номера сборки ClickOnce

Существует автоматически увеличивающийся номер сборки/версии с приложениями Publish for ClickOnce. Этот номер версии отличается от версии сборки в свойствах проекта (которая, в свою очередь, автоматически отображается в сгенерированном окне сведений о WPF).

Есть ли способ синхронизировать номер версии ClickOnce и номер проекта в свойствах сборки? Цель состоит в том, чтобы получить автоматически увеличивающийся и идентичный номер версии для обоих мест.

Номер версии для ClickOnce/публикации

Свойства проекта


person Horst Walter    schedule 20.11.2012    source источник


Ответы (1)


Нет автоматического (встроенного) способа сделать это. Возможный обходной путь, который я использую в своих проектах, заключается в создании информации о версии публикации и сборки с помощью специальной задачи msbuild.

Некоторые проекты, доступные в виде пакетов nuget, направлены на решение этих проблем, но в них нет ничего полного. Взгляните на SemVerHarvester и CroMagVersion ...

У обоих выше есть много проблем:

  1. SemVerHarvester привязан к git/hg и получает информацию о версии из тега git.
  2. На самом деле он не записывает файл AssemblyInfo.cs сам по себе, а полагается на задачи сообщества Msbuild.
  3. Файл AssemblyInfo.cs всегда "затронут", что означает, что каждая перестройка является полной перестройкой, а не добавочной перестройкой. CroMagVersion частично обходит это - он определяет #define в релизных сборках и будет регенерировать AssemblyInfo.cs только в том случае, если это определение присутствует...
  4. Ни один из проектов напрямую не задает свойства ApplicationVersion/ApplicationRevision, используемые системой ClickOnce для публикации.

У меня есть обходные пути для всего вышеперечисленного, которые я намерен скоро открыть на github... а пока я опишу, что я сделал:

Я создал пользовательскую задачу msbuild, которая считывает информацию о версии из git, а затем создает в памяти файл AssemblyInfo на основе этой информации. Я проверяю существующий файл AssemblyInfo.cs (то есть файл с AssemblyVersion и другими атрибутами) и перезаписываю его тогда и только тогда, когда версия в памяти новее. Это позволяет выполнять пошаговые перестройки. Наконец, я также вывожу ApplicationVersion, ApplicationRevision и другие свойства для поддержки ClickOnce.

Если бы я открыл свои обходные пути как отдельное решение, я бы, вероятно, разрешил получать информацию о версии из текстового файла, git, hg и т. д.

Проблемы, для которых я до сих пор не нашел хороших решений:

ClickOnce напрямую не поддерживает несколько каналов выпуска — например, debug/beta/custom_feature/что угодно, что заставляет меня задаться вопросом, следует ли мне отказаться от clickonce и использовать Мерцание вместо этого.

person Grynn    schedule 09.12.2012