В настоящее время я "автоматизирую сборку" нашего решения .NET (которое содержит много проектов, по крайней мере, 20. Некоторые winForms, некоторые веб-проекты, все с различными конфигурациями выпуска ... тьфу!). Я использую CruiseControl.NET (или CC.NET, whatevs) и NANT. Плюс, DOS, Powershell и несколько других волшебных бинов, в которые мы не должны вдаваться:)
Моя цель - создать метку сборки (которая, кстати, у меня уже есть полуработающая). Метка сборки состоит из номера Min / Maj и номера регистрации SVN. Это хорошо для нас, и мы счастливы с этим. Теперь мне нужно, чтобы мои проекты .NET ссылались на номер сборки, чтобы члены моей команды QA знали, с каким номером сборки они тестируют.
Моя задача обозначения версии nANT выглядит следующим образом:
<project name="updateassemblyversion" default="updateassemblyversion">
<target name="updateassemblyversion" description="generates the version number">
<echo message="Setting the build version to ${CCNetLabel}..." />
<attrib file="AssemblyInfo.cs" readonly="false" />
<asminfo output="AssemblyInfo.cs" language="CSharp">
<imports>
<import namespace="System" />
<import namespace="System.Reflection" />
</imports>
<attributes>
<attribute type="AssemblyVersionAttribute" value="${CCNetLabel}" />
<attribute type="AssemblyFileVersionAttribute" value="${CCNetLabel}" />
</attributes>
</asminfo>
<attrib file="AssemblyInfo.cs" readonly="true" />
</target>
В любом случае, я пытаюсь установить информацию о сборке на моем сервере сборки. Я прочитал, что не рекомендуется использовать более 20 файлов AssemblyInfo.cs для записи, поэтому я вручную создал файл GlobalyAssemblyInfo.cs в качестве «элемента решения», который связан со всеми моими проектами через «Добавить .. Существующий элемент ... Добавить ссылку ". Я не думаю, что это то, что мне понадобится, так как мои версии будут выполняться на сервере сборки ...
Справедливо отметить, что моя текущая рабочая задача nANT (пример которой приведен выше), которую я тестировал, использует правильную метку версии, которая мне нужна, но эта задача неверна для моего сценария. Он создает НОВЫЙ файл AssemblyInfo.cs и ставит метку версии после того, как сборка уже скомпилирована. Я знаю, что это неправильно, но это, по сути, производит то, что мне нужно, но я не уверен, как использовать это в моем сценарии «сборки» и в том порядке, в котором я нуждаюсь. Я знаю, что это должно произойти ДО того, как произойдет компиляция, но как мне получить задачу компиляции, чтобы использовать только что сгенерированный файл? (см. вопрос № 4).
Вот что я не понимаю:
- Сохраняю ли я свои старые 20+ файлов AssemblyInfo.cs? Что их
цель сейчас? Они мне не нужны, я делаю
не верю. Я наверное не должен
удалите их из файла решения,
но они бесполезны, верно?
- Если я использую сгенерированный файл GlobalAssemblyInfo.cs, из моего
NANT задача, как мне получить
ссылка на него и версия
для моей компиляции?
- Создает файл GlobalAssemblyInfo вручную (в
мое решение), и ссылки на него
из каждого проекта, недействительным для моего
ситуация? Я думаю, что мне не нужно
эти ссылки на файлы в моем решении
а проекты вообще мне нужны только
на моей рутине сборки на моей сборке
сервер. Я уже произвожу
Файл "AssemblyXYZ.cs" (из nANT)
с правильной версией штампа.
Разве я не должен использовать это для компиляции
все мои проекты с?
- Если # 3 верно, как я могу реализовать это в моей конфигурации CC.NET
файл (или NANT Боже?). В принципе,
как мне сказать компилятору VS использовать
мой новый GlobalAssemblyInfo.cs
(генерируется NANT) для всех 20+ .NET
проекты в моем решении?
- Как заставить мои проекты .NET ссылаться (внутренне) на новые
генерируется, динамическая сборка
номер / versionstamp? Мне нужно QA чтобы быть
в состоянии увидеть это в приложении
UI.
Как только это произойдет, я буду одним счастливым автостроителем :)
Ура!