2010-05-28 2 views
3

Итак, у меня есть CommonAssemblyInfo.cs, связанный со всеми проектами в моем решении и динамически генерируемый моими скриптами rake/albacore, которые не проверяются в исходном контроле.Versioning CommonAssemblyInfo.cs и MSBuild

У меня также есть CommonAssemblyInfo.cs.local для использования, когда рубина недоступна, в основном для использования разработчиками.

Возможно ли иметь задание msbuild или что-то, что выполняется перед любой другой компиляцией проекта, которая скопирует CommonAssemblyInfo.cs.local в CommonAssemblyInfo.cs, прежде чем пытаться скомпилировать мое решение? Мне очень жаль, что у меня есть команда, о которой вы должны знать, и введите ее, чтобы открыть и построить решение в Visual Studio.

UPDATE Так что я в конечном итоге, используя пакетный файл в качестве решения широкого события до сборки, как описано здесь: Solution-wide pre-build event?, он проверяет, если CommonAssemblyInfo.cs существует, и если не копирует CommonAssemblyInfo.cs.local в CommonAssemblyInfo .cs просто использует простой командный файл.

ответ

3

Это решение, в котором я закончил.

У меня есть каждый проект в ссылке на решение CommonAssemblyInfo.cs, которая автоматически генерируется для меня моими скриптами сборки (rake + albacore).

Поскольку я не могу проверить CommonAssemblyInfo.cs в исходном элементе управления, я создаю CommonAssemblyInfo.cs.local.

Простое решение: создайте go.bat, который копирует CommonAssemblyInfo.cs.local в CommonAssemblyInfo.cs, которые разработчики должны запускать при первом запуске проекта, прежде чем открывать решение в VS.

Для чисто политических причин, если бы я сделал это, у людей были бы шикарные приятели во мне, делающие «нестандартные» вещи. Ниже приводится комплексное решение:

Я создал проект в решении под названием PreBuild, от которого зависит каждый проект в решении. Это заставляет порядок сборки быть таким, чтобы этот проект был построен первым. Этот проект содержит событие предварительно сборки, который вызывает следующий пакетный файл:

echo verifying CommonVersionInfo.cs exists 
cd 
IF NOT EXIST ..\..\..\CommonAssemblyInfo.cs COPY ..\..\..\CommonAssemblyInfo.cs.local ..\..\..\CommonAssemblyInfo.cs 

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

0

Вы говорите о компиляции в VS IDE или компиляции через сборку команды? Если вы говорите о сборке команды, вы можете использовать событие «AfterGet» в качестве места для использования стандартной задачи «копировать» msbuild. Если вы говорите о VS IDE, вы все равно можете использовать задачу «copy» msbuild.

+0

Я говорил о сборке VS IDE. Я хотел, чтобы было проведено большое предварительное событие для решения, которое я использовал с помощью этого: http://stackoverflow.com/questions/2295454/visual-studio-solution-wide-pre-build-event –