Используйте Continuous Integration для изменения файла проекта .NET - PullRequest
4 голосов
/ 27 марта 2012

У нас есть две базы кода для тестирования и производства.Единственные различия между этими двумя базами кода заключаются в двух файлах:

  • Файл конфигурации
  • Файл сборки (.csproj)

Ведение двух ветокэто значительное усилие, которое может быть устранено путем объединения баз кода в одну и использования непрерывной интеграции (например, Hudson) для изменения файлов в соответствии с целевой средой.

Начиная с VS2010, существуеточень умное решение для файлов конфигурации, которое позволяет нам определять различные преобразования файла конфигурации для двух конфигураций сборки: «Release-Test» и «Release-Prod».

Однако у нас есть некоторые различия, которые отражены в проектефайл (.csproj), такой как:

  • Имя полученной сборки: Foo.exe и Foo-Test.exe.
  • Версия сборки.
  • Параметры развертывания ClickOnce.

Есть ли какой-нибудь разумный способ преобразования файла csproj на основе конфигурации сборки или использования этих параметровподключен к файлу конфигурации или коду C #?

Обновление:

Я пытался использовать условные свойства MSBuild в файле csproj, как предложено @JaredPar, но у него есть парапредостережений (см. мои комментарии для деталей).Есть ли другие способы добиться этого?

1 Ответ

2 голосов
/ 27 марта 2012

Звучит так, как будто вы хотите использовать один csproj и элементы управления, такие как имя сборки, на основе конкретной конфигурации сборки. Если это так, то вы ищете элемент Conditional в свойствах MSBuild

<AssemblyName Condition="'$(Configuration)' == 'Release-Prod'">Foo</AssemblyName>
<AssemblyName Condition="'$(Configuration)' == 'Release-Test'">Foo-Test</AssemblyName>
...