2013-12-06 1 views
6

Итак, у меня есть несколько десятков решений, построенных с использованием той же командной строки.По умолчанию или укажите свойства msbuild во внешнем файле

MSBuild SolutionName.sln/р: property1 = значение1; свойство2 = значение2; и т.д. и т.д. и т.п.

За исключением количество свойств только растет и растет.

Есть ли способ указать внешний файл каким-то образом, так как я не получаю команду 10 строк msbuild? (Подумайте, свойство 100, свойство 101 и т. Д.).

Я знаю файлы .wpp.target. Однако, чтобы скопировать их в каждую папку проекта действительно ... это мое последнее средство.

И нет, я не изменяю цели и файлы MSBuild по умолчанию вообще.

ответ

6

Прежде всего - я бы рекомендовал использовать скрипты msbuild для создания ваших решений вместо прямого создания sln-файла с помощью командной строки. Например. использовать что-то вроде этого:

msbuild SolutionName.Build.proj 

и внутри этого Solution1.Build.proj вы можете положить что-нибудь столь же просто, как

<Project ToolsVersion="4.0" DefaultTargets="BuildMe" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="BuildMe"> 
     <MSBuild Projects="SolutionName.sln" Properties="property1=value1;property2=value2;"/> 
    </Target> 
</Project> 

После этого шага, который добавляет гибкости в процессе сборки, вы можете начать рычаги Метаданные AdditionalProperties для задачи MSBuild.

Затем вы можете использовать <Import конструкции, чтобы сохранить список общих свойств в отдельных метаданных файла и элемента для передачи значений свойств:

<Project ToolsVersion="4.0" DefaultTargets="BuildMe" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="MySharedProperies.props" /> 
    <ItemGroup> 
     <ProjectToBuild Include="SolutionName.sln"> 
     <AdditionalProperties>SomeProjectSpecificProperty</AdditionalProperties> 
     </ProjectToBuild> 
    </ItemGroup> 

    <Target Name="BuildMe"> 
     <MSBuild Projects="@(ProjectToBuild)" Properties="@(MySharedProperies)"/> 
    </Target> 
</Project> 

Вы можете проверить этот пост для более подробной информации о properties and additional properties metadata или this original MSDN reference (прокрутках в раздел «Свойства метаданных»)

Это основная идея, как это сделать, если у вас есть какие-либо вопросы - не стесняйтесь спрашивать.

+1

Работает как очарование. Просто хочу указать в узле MSBuild, это Project «S». Множественное, не единственное. Я скопировал вставку и должен был исправить это. –

+0

Да, написано по памяти и не проверил его дважды. Зафиксится в src в ближайшее время –

+0

вы всегда будете рады. –

1

Я использую файл импорта для вещей, которые являются общими для разных проектов.

<Import Project="CommonBuildProperties.proj"/> 

Этот файл содержит PropertyGroup, у которого есть то, что я хочу иметь одинаковое значение в проектах построения. Там также есть условный оператор, который устанавливает определенные имена папок в зависимости от имени компьютера, на котором он запущен. Во время выполнения, если мне нужно переопределить что-либо в командной строке, я это делаю.

У меня также есть файлы импорта конкретных проектов (одна из наших сборников - приложение Powerbuilder с собственным набором инструментов и пекаллилло); порядок импорта гарантирует, что для них требуются разные значения для одного и того же имени элемента. Я получаю то, что хочу.

Мои командные строки не ужасны, если я не делаю что-то странное, которое требует всего всего, что было переопределено. О единственных вещах у есть, чтобы пройти в это номер версии и тип сборки (выпуск или отладка).

6

Чтобы ответить на исходный вопрос, да, вы можете указать свойства во внешнем файле. Они называются файлами ответов MSBuild.

msbuild somesolution.sln @PathToResponseFile.rsp 

Внутри файла ответов вы можете поместить свои свойства, по одному на строку.

/verbosity:detailed 
/target:build 
/platform:AnyCPU 
/configuration=Release 

Некоторые ссылки, чтобы лучше понять: http://dailytechlearnings.wordpress.com/2011/08/24/msbuild-response-file/ http://msdn.microsoft.com/en-us/library/vstudio/ms404301.aspx

Однако, используя файл MSBuild строить свои решения и проекты является лучшим решением. Вы можете создавать глобальные цели, которые будут делать то, что вам нужно. Вы можете создавать свои собственные целевые объекты Clean и Build, которые затем будут создавать/очищать ваши решения.

+0

О, если бы только я мог отметить несколько ответов ... Это технически правильно, а другое решение проблемы:/ –

+0

Также смешно, как эти маленькие кусочки никогда не документируются ... (Нет, я не знаю, t RTFM по очереди, так что стреляйте в меня, если я ослеп.) –

Смежные вопросы