Нет автоматического (встроенного) способа сделать это. Возможный обходной путь, который я использую в своих проектах, заключается в создании информации о версии публикации и сборки с помощью специальной задачи msbuild.
Некоторые проекты, доступные в виде пакетов nuget, направлены на решение этих проблем, но в них нет ничего полного. Взгляните на SemVerHarvester и CroMagVersion ...
У обоих выше есть много проблем:
- SemVerHarvester привязан к git/hg и получает информацию о версии из тега git.
- На самом деле он не записывает файл AssemblyInfo.cs сам по себе, а полагается на задачи сообщества Msbuild.
- Файл AssemblyInfo.cs всегда "затронут", что означает, что каждая перестройка является полной перестройкой, а не добавочной перестройкой. CroMagVersion частично обходит это - он определяет #define в релизных сборках и будет регенерировать AssemblyInfo.cs только в том случае, если это определение присутствует...
- Ни один из проектов напрямую не задает свойства 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