Задача MSBuild для получения обновления FileAssemblyVersion только для проектов с изменениями - PullRequest
1 голос
/ 02 августа 2010

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

1 Ответ

0 голосов
/ 04 августа 2010

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

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

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

...