Нет, состав не означает вложение. Имело бы смысл иметь вложенный класс, если Вы хотите скрыть его больше в пространстве имен внешнего класса.
Так или иначе, я не вижу практического применения для вложения в Вашем случае. Это сделало бы код тяжелее для чтения (понимают), и это также увеличило бы добавление отступа, которое сделает строки короче и более подверженный разделению.
Я не смог найти существующее решение, которое бы выполняло то, что мне было нужно, поэтому в итоге я написал собственный этикетировщик CruiseControl.NET.
Вот как это делается:
using ThoughtWorks.CruiseControl.Core; using ThoughtWorks.CruiseControl.Remote; // это имя этикетировщика, которое будет использоваться в ccnet.config [ReflectorType ("customLabeller")] открытый класс CustomLabeller: ILabeller { [ReflectorProperty ("syncronisationFilePath", обязательно = true)] публичная строка SyncronisationFilePath {получить; установлен; } #region ILabeller Members публичная строка Generate (IIntegrationResult previousResult) { если (ShouldIncrementLabel (previousResult)) return IncrementLabel (); если (previousResult.Status == IntegrationStatus.Unknown) вернуть «0»; return previousResult.Label; } public void Run (результат IIntegrationResult) { result.Label = Создать (результат); } #endregion частная строка IncrementLabel () { если (! File.Exists (SyncronisationFilePath)) вернуть «0»; используя (FileStream fileStream = File.Open (SyncronisationFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)) { // читаем номер последней сборки из файла var bytes = новый байт [fileStream.Length]; fileStream.Read (байты, 0, байты.Длина); строка rawBuildNumber = Encoding.ASCII.GetString (байты); // анализируем номер последней сборки int previousBuildNumber = int.Parse (rawBuildNumber); int newBuildNumber = предыдущийBuildNumber + 1; // увеличиваем номер сборки и записываем обратно в файл bytes = Encoding.ASCII.GetBytes (newBuildNumber.ToString ()); fileStream.Seek (0, SeekOrigin.Begin); fileStream.Write (байты, 0, байты.Длина); return newBuildNumber.ToString (); } } private static bool ShouldIncrementLabel (IIntegrationResult previousResult) { return (previousResult.Status == IntegrationStatus.Success || previousResult.Status == IntegrationStatus.Unknown) } }
C: \ Program Files \ CruiseControl.NET \ server \ shared \ buildnumber.txt false
Я столкнулся с той же проблемой, но обнаружил, что при использовании
в сочетании с
оказался гораздо более простым решением.
Единственная проблема, связанная с использованием stateFileLabeller, заключается в том, что вы не можете указать каталог для файлов состояния в проекте, потому что CruiseControl.NET не найдет его. Я оставил его в каталоге по умолчанию, и он отлично работает.