Отслеживание версий на уровне файлов в сборках с использованием Visual Studio и .NET? - PullRequest
1 голос
/ 03 июня 2009

Я хочу, чтобы инструмент или метод могли ответить на вопрос «Какая версия файла X использовалась для сборки Assembly abc.dll?» Недавно я перешел в группу разработчиков .NET, и кажется, что этот вопрос возникает постоянно, в той или иной форме, и мы не совсем справились с этим. Кто-то скажет что-то вроде «Эй, ваш последний код на тестовом сервере?» и ответ неизбежно что-то вроде «я не знаю».

В давние времена разработки Unix (я здесь встречаюсь) система контроля версий SCCS имела специальные ключевые слова , такие как% I% (версия) и% M% (имя модуля) что вы можете поместить в свой файл, который будет заменен соответствующей информацией о версии SCCS при каждом извлечении файла. Таким образом, вы могли бы сделать изящную хитрость, присвоив константу «% I%% M%» в исходном файле, скомпилировать и затем выполнить команду Unix «strings» в полученной библиотеке, чтобы определить версии того, какие файлы использовались для создания этого файла.

Я выполнил быстрый тест для проверки себя в файле класса C #, например:

public const String VERSION_STRING = "*VERSION* = MyClass 1.0";

Затем запустил эту командную строку в моем каталоге DLL:

>for %f in (*.dll) do find "VERSION" %f

Но результаты были:

---------- MYASSEMBLY.DLL
VERSION_STRING

Это не совсем то, что было после того, как я (это дало мне имя константы, но никакой информации о версии, которую я пытался вставить в класс вручную).

Для чего бы то ни было, в настоящее время мы используем Clearcase для контроля версий (в настоящее время это стандарт компании). В Clearcase есть некоторые инструменты, которые могут помочь нам в этом (например, clearaudit ), но это потребует некоторых усилий для улучшения и переоборудования нашего процесса сборки. Я должен также упомянуть, что мы рассматриваем возможность перехода на Subversion. Поэтому я думаю, что решения, которые работают с .NET в любой из различных систем управления версиями или средах сборки (MSBuild, NAnt, CruiseControl), являются честной игрой.

Существуют ли другие, особенно ориентированные на .NET, решения для отслеживания того, какая версия какого файла вошла в какую сборку?

Ответы [ 3 ]

1 голос
/ 03 июня 2009

У меня положительный опыт работы с серверами непрерывной интеграции SubVersion и CC.NET.

Вы установили цель NAnt, которая захватывает последнюю версию (она может заблокировать хранилище здесь), затем строит. После завершения сборки он создает тег версии в SVN.

Версия файла может быть легко выведена из версии тега при сборке.

1 голос
/ 03 июня 2009

Мы быстро отказались от идеи использования специальных ключевых слов, поскольку интегрированные метаданные (например, номер версии) в данные (файлы, хранящиеся в VCS), как правило, не очень хорошая идея (см. Обсуждение в этом вопросе SO: Номера встроенных версий - добро или зло?")

Наш подход заключается в создании «заметки о выпуске» с такой информацией. Этот простой текстовый файл затем сохраняется вместе с dll сборки.

0 голосов
/ 03 июня 2009

Для своей «общественной» работы я использую простую схему; Я использую номер редакции SVN в качестве версии сборки в атрибутах [AssemblyVersion] / [AssemblyFileVersion] для сборки. Запрашивать их довольно просто как во время выполнения, так и через проводник, и скрипт для их обновления тоже довольно прост - первые несколько задач здесь .

...