Вот пример C и для автоматического обновления информации о ревизии в сборке. Он основан на ответе Уилла Дина, который не очень сложен.
Пример:
- Скопируйте AssemblyInfo.cs в AssemblyInfoTemplate.cs в
папка Свойства .
- Измените Действие построения на Нет для AssemblyInfoTemplate.cs.
Измените строку с помощью AssemblyFileVersion:
[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]
Рассмотрите возможность добавления:
[assembly: AssemblyInformationalVersion("Build date: $WCNOW=%Y-%m-%d %H:%M:%S$; Revision date: $WCDATE=%Y-%m-%d %H:%M:%S$; Revision(s) in working copy: $WCRANGE$$WCMODS?; WARNING working copy had uncommitted modifications:$.")]
,
, который даст подробную информацию о статусе ревизии источника, из которого была собрана сборка.
Добавьте следующее событие Pre-build в свойства файла проекта:
subwcrev "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfoTemplate.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f
Рассмотрите возможность добавления AssemblyInfo.cs в список игнорируемых svn. Подставленные номера и даты ревизий изменят файл, что приведет к незначительным изменениям и ревизиям, и $ WCMODS $ примет значение true. AssemblyInfo.cs, конечно, должен быть включен в проект.
В ответ на возражения Вима Коенена я заметил, что, в отличие от того, что было предложено Дэррилом, AssemblyFileVersion также поддерживает , а не номера поддержки выше 2 ^ 16. Сборка будет завершена, но свойство Версия файла в фактической сборке будет AssemblyFileVersion по модулю 65536. Таким образом, 1.0.0.65536, а также 1.0.0.131072 приведут к 1.0.0.0 и т. Д. В этом примере всегда является истинным номером редакции в свойстве AssemblyInformationalVersion. Вы можете пропустить шаг 3, если считаете это серьезной проблемой.
Редактировать: дополнительная информация после некоторого использования этого решения.
- Теперь он использует AssemblyInfo.cst, а не AssemblyInfoTemplate.cs, потому что у него автоматически будет Build Action опция Нет , и он не загромождает ваш список ошибок, но свободная подсветка синтаксиса.
Я добавил два теста в мои файлы AssemblyInfo.cst:
#if(!DEBUG)
$WCMODS?#error Working copy has uncommitted modifications, please commit all modifications before creating a release build.:$
#endif
#if(!DEBUG)
$WCMIXED?#error Working copy has multiple revisions, please update to the latest revision before creating a release build.:$
#endif
Используя это, вы обычно должны выполнить полное обновление SVN после коммита и до того, как сможете сделать успешную сборку релиза. В противном случае $ WCMIXED будет истинным. По-видимому, это связано с тем, что переданные файлы повторно обрабатываются после фиксации, а другие файлы - нет.
- У меня были некоторые сомнения в том, что первый параметр subwcrev, "$ (SolutionDir)", который задает область для проверки информации о версии svn, всегда работает как нужно. Возможно, это должен быть $ (ProjectDir), если вы довольны, если каждая отдельная сборка находится в согласованной редакции.
Добавление
Чтобы ответить на комментарий @ tommylux.
SubWcRev может использоваться для любого файла в вашем проекте. Если вы хотите отобразить информацию о редакции на веб-странице, вы можете использовать этот шаблон VersionInfo:
public class VersionInfo
{
public const int RevisionNumber = $WCREV$;
public const string BuildDate = "$WCNOW=%Y-%m-%d %H:%M:%S$";
public const string RevisionDate = "$WCDATE=%Y-%m-%d %H:%M:%S$";
public const string RevisionsInWorkingCopy = "$WCRANGE$";
public const bool UncommitedModification = $WCMODS?true:false$;
}
Добавьте событие перед сборкой, аналогичное событию для AssemblyInfo.cst, и у вас будет легкий доступ ко всей соответствующей информации SubVersion.