MSBuild - установить свойства для решения - PullRequest
13 голосов
/ 19 февраля 2010

Мы используем .NET 3.5 с VS2008. У меня есть решение с ~ 20 проектами, и это число будет расти с течением времени по мере роста приложения и добавления новых модулей. Сегодня мне нужно было установить свойство для каждого проекта. Мне пришлось отредактировать каждый файл csproj, чтобы добавить следующее:

  <Target Name="BeforeBuild">
    <CreateProperty Condition=" '$(SolutionDir)' != '' And '$(SolutionDir)' != '*Undefined*' " 
                    Value="$(SolutionDir)Tools\MSBuild">
      <Output TaskParameter="Value" PropertyName="AlToolPath" />
    </CreateProperty>
  </Target>

Это позволяет проектам найти компоновщик сборки (AL.exe), который хранится в моем исходном репозитории, так что сборка не зависит от компьютера (можно проверить и собрать на любом компьютере с .NET без необходимости устанавливать SDK). Решение построено из командной строки с использованием MSBuild разработчиками, установкой пакетных файлов, CCNet и т. Д.

Во всяком случае, я искал лучший способ сделать это (то есть что-то вроде свойств уровня решения), но не смог найти один. Я знаю, что можно установить значение свойства в командной строке MSBuild, но это не очень хорошо для меня, поскольку все существующие и будущие командные строки должны будут включать его. Я также подумал о том, чтобы вызвать цель target в первом построенном проекте, чтобы использовать пользовательскую задачу для установки переменной среды, и цель after в последнем проекте, чтобы удалить ее, но это казалось более тяжелым и хрупким, чем просто редактирование всех файлов проекта по отдельности .

Пожалуйста, дайте мне знать, если вы сделали что-то подобное или знаете способ установить свойство один раз для решения, которое может использоваться несколькими проектами (включая .NET 4 / VS2010, с которым у меня нет опыта). Помните, что для создания файла sln мы используем MSBuild, а не отдельные проекты.

Ответы [ 3 ]

15 голосов
/ 19 февраля 2010

Вы можете указать это свойство и все другие распространенные свойства в одном файле и загрузить его, включив в файлы проекта оператор Import .Это то, что мы делаем в нашей среде сборки, которая имеет что-то вроде 220 встроенных проектов и несколько общих файлов проектов (например, «ветвь»).Это работает хорошо.

8 голосов
/ 03 апреля 2014

Я реализовал решение, предложенное @ fatcat111 несколько раз.На этот раз я автоматизировал этот процесс с помощью NuGet - Common.Props .Пакет добавит общий файл props на уровне решения, и, установив пакет в несколько проектов одного и того же решения, можно совместно использовать свойства.

Код включен GitHub .

1 голос
/ 19 февраля 2010

Поскольку файлы решений не являются файлами MSBuild, вы не сможете выполнять такие операции. Единственный выбор - иметь дело с этим или использовать основной файл msbuild вместо построения файла решения. Одним из вариантов может быть создание специальной конфигурации, используемой вашим процессом сборки. А для файлов решения вы можете указать используемую конфигурацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...