MSBuild - Как создать файл решения .NET (в сценарии задачи XML) из предварительно написанных команд командной строки - PullRequest
17 голосов
/ 25 февраля 2011

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

Вот содержимое моего файла сборки .BAT:

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat"
cd  C:\Sandbox\Solution
msbuild MyTopSecretApplication.sln /p:OutputPath=c:\TESTMSBUILDOUTPUT /p:Configuration=Release,Platform=x86
pause

^ Это хорошо работает, но теперь у меня есть необходимость использовать задачу MSBuild для TeamCity CI.Я попытался написать несколько скриптов MSBuild, но не могу заставить их работать одинаково.Какой сценарий сборки эквивалентен команде, которую я использую в своем файле .BAT?Любые идеи?

Я пытался использовать что-то подобное, но безуспешно (я знаю, что это неправильно):

<?xml version="1.0"?>
<project name="Hello Build World" default="run" basedir=".">

<target name="build">
    <mkdir dir="mybin" />
    <echo>Made mybin directory!</echo>

  <csc target="exe" output="c:\TESTMSBUILDOUTPUT">
    <sources>
      <include name="MyTopSecretApplication.sln"/>
    </sources>
  </csc>
  <echo>MyTopSecretApplication.exe was built!</echo>
</target>

<target name="clean">
    <delete dir="mybin" failonerror="false"/>
</target>

<target name="run" depends="build">
  <exec program="mybin\MyTopSecretApplication.exe"/>
</target>

Что мне просто нужноэто скрипт компоновки MSBuild XML, который компилирует одно решение для режима Release в заданный выходной каталог.Любая помощь?

Ответы [ 3 ]

28 голосов
/ 25 февраля 2011

Используйте задачу MSBuild для построения решения, передавая нужные вам свойства.

<?xml version="1.0" encoding="utf-8"?>
<Project
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
    ToolsVersion="4.0"
    DefaultTargets="Build">

    <PropertyGroup>
        <OutputDir>c:\TESTMSBUILDOUTPUT</OutputDir>
    </PropertyGroup>

    <ItemGroup>
        <ProjectToBuild Include="MySecretApplication.sln">
            <Properties>OutputPath=$(OutputDir);Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>

    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"/>
    </Target>

</Project>
2 голосов
/ 26 февраля 2011

Вот мой последний скрипт MSBuild:

<?xml version="1.0" encoding="utf-8"?>

<PropertyGroup>
    <OutputDir>C:\TESTMSBUILDOUTPUT</OutputDir>
</PropertyGroup>

<ItemGroup>
    <ProjectToBuild Include="MyTopSecretApplication.sln" >
        <Properties>OutputPath=$(OutputDir);Configuration=MSBuildRelease;Platform=x86</Properties>
    </ProjectToBuild>
</ItemGroup>

<Target Name="Build">
    <MSBuild Projects="@(ProjectToBuild)"/>
</Target>

Как видите, основное отличие от ответа Брайана Уокера - «Конфигурация»«настройка.Здесь он установлен на «MSBuildRelease» вместо «Release», который я настроил в .NET IDE.Следуйте инструкциям, предложенным Брайаном (щелкните правой кнопкой мыши узел решения и выберите Configuration Manager в Visual Studio, добавьте «НОВУЮ» конфигурацию и удалите / снимите отметку с проектов, которые вы хотите исключить.)

С тех пор я загрузил это в свой TEAMCITYсервер, и автоматизировал мой процесс сборки .NET с вашей помощью.Огромное спасибо Брайану Уокеру (товарищу из Техаса) ... Я куплю тебе пиво !!CHEERS !!

0 голосов
/ 26 февраля 2011

Я знаю, что это не прямой ответ на ваш вопрос, но почему бы просто не использовать встроенный в Visual Studio runner, взять скомпилированный вывод из соответствующего пути / obj и сохранить его как артефакт сборки? Если вы фактически не делаете ничего, кроме простой компиляции с указанной конфигурацией сборки, то добавление специального файла сборки не принесет особой пользы, а использование артефактов сборки может сделать жизнь намного проще (используйте их в других сборках, загрузите их легко и т. д.).

Попробуйте описанную здесь конфигурацию, если это не имеет смысла: http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_25.html

...