Хорошо, вот что я сделал. Это не очень элегантно, но работает. Я создал шаг предварительной сборки, который выглядит следующим образом:
echo namespace Some.Namespace > "$(ProjectDir)\CiInfo.cs"
echo { >> "$(ProjectDir)\CiInfo.cs"
echo ///^<summary^>Info about the continuous integration server build that produced this binary.^</summary^> >> "$(ProjectDir)\CiInfo.cs"
echo public static class CiInfo >> "$(ProjectDir)\CiInfo.cs"
echo { >> "$(ProjectDir)\CiInfo.cs"
echo ///^<summary^>The current build number, such as "153"^</summary^> >> "$(ProjectDir)\CiInfo.cs"
echo public const string BuildNumber = ("%BUILD_NUMBER%" == "" ? @"Unknown" : "%BUILD_NUMBER%"); >> "$(ProjectDir)\CiInfo.cs"
echo ///^<summary^>String of the build number and build date/time, and other useful info.^</summary^> >> "$(ProjectDir)\CiInfo.cs"
echo public const string BuildTag = ("%BUILD_TAG%" == "" ? @"nohudson" : "%BUILD_TAG%") + " built: %DATE%-%TIME%"; >> "$(ProjectDir)\CiInfo.cs"
echo } >> "$(ProjectDir)\CiInfo.cs"
echo } >> "$(ProjectDir)\CiInfo.cs"
Затем я добавил «CiInfo.cs» в проект, но проигнорировал его из-за контроля версий. Таким образом, мне никогда не придется редактировать или фиксировать его, и у проекта всегда есть постоянная информация, которая является номером и временем последней сборки.
define не позволяет вам определять константы в C #, как вы можете в C / C ++.
Из этой страницы :
Директива #define не может использоваться для объявления постоянных значений, как это обычно делается в C и C ++. Константы в C # лучше всего определять как статические члены класса или структуры. Если у вас есть несколько таких констант, рассмотрите возможность создания отдельного класса «Константы» для их хранения.
Если вы хотите отразить номер сборки в вашем классе AssemblyInfo, большинство инструментов сборки поддерживают генерацию этого класса во время сборки. MSBuild имеет задачу для этого. Как и NAnt . Не уверен, как Хадсон делает это.