2010-08-02 3 views
1

Есть ли способ, используя msbuild или иначе, чтобы определить, какие проекты имеют изменения в текущей сборке и обновить атрибут FileAssemblyVersion в AssemblyInfo.cs только для этих проектов?Задача MSBuild для получения обновления FileAssemblyVersion только для проектов с изменениями

+0

Ваш вопрос очень ли что вы на самом деле спрашиваете: «Как программно идентифицировать набор изменений в периоде», который полностью зависит от вашего исходного сервера управления, поэтому никто не может ответить на него, не зная, какую систему управления версиями вы хотите для запроса этой информации. –

+0

Я использую TFS 2008. Мой пирог в небе думал бы что-то вроде этих строк: Прежде чем я вызову цель, которая выполняет компиляцию sln, я вызываю специальную задачу MSBuild, которая обновляет FileAssemblyVersion для любых проектов, у которых есть файлы который изменился, что, в свою очередь, вызвало текущую сборку. Очевидно, речь идет о постоянной интеграции. –

ответ

0

Предполагая, что вы настроили инкрементные [get и] компиляции, следующим шагом будет подключение к последовательности MSBuild. Посмотрите в FrameworkDir\Microsoft.Common.Targets. Проблема в том, что вещи просто не созданы для работы таким образом - тот факт, что есть шаги _TimestampBeforeCompile и _TimeStampAfterCompile, которые просто показывают, что вы не можете определить априори, если что-то собирается скомпилировать. Хотя теоретически вы могли бы подключиться до [специфического для языка] CoreCompile [например, в Microsoft.CSharp.targets], проблема заключалась бы в том, что вам нужно иметь то же самое Inputs, как и в случае, чтобы определить, произойдет ли это, будет означать много вырезания и вставки и синхронизации с системными файлами. Другая вещь, о которой нужно опасаться, отмечается в комментарии в верхней части цели _ComputeNonExistentFileProperty.

Таким образом, за пределами внесения очень глубоких изменений в последовательность (например, подключение к бит постсочетания, которое заставляет второй компилировать, если пользовательский _TimeStampAfterCompile ваш обнаруживает, что компиляция состоялась, я бы сказал, что есть нет, легко, рекомендуется или поддерживается.

Сказав это, AssemblyFileVersion (вы ссылаетесь на FileAssemblyVersion, который не существует: P) легко изменить после компиляции как своего ресурса - вы найдете инструменты для этого Но я предполагаю, что вы действительно говорите о том, чтобы делать и то, и другое, и AssemblyVersion, которые не могут быть изменены после этого точно так же.