NAnt <msbuild>пользовательский каталог вывода - PullRequest
7 голосов
/ 25 февраля 2009

Я новичок в NAnt и смог создать <target> который

1) Удаляет любой код из текущей папки

2) Экспорт свежего кода из SVN

3) Создает код в каталоге по умолчанию, который является папкой PrecompiledWeb (это веб-приложение)

Вот оно:

<target name="export" description="export code from svn">
    <delete dir="${Delete.Dir}"></delete>
    <exec program="svn" commandline="export ${MySVN.Repos} ${MySVN.Dest}" />
    <msbuild project="${Solution.Filename}">
        <property name="Configuration" value="Release"/>
    </msbuild>
</target>

Я хочу указать пользовательский каталог вывода (кроме «PrecompiledWeb»). Возможно ли это, и не могли бы вы показать мне необходимый тег / свойство?

Спасибо!

EDIT

Благодаря Скотту и Си, я все ближе к решению, но у меня все еще нет ничего, что работает. Там комментарии привели меня к этой статье Свойство пути вывода MSBuild . Используя их код:

<?xml version="1.0"?>
<project name="test" default="build" basedir="." xmlns="http://nant.sf.net/schemas/nant-0.84.win32.net-1.0.xsd">
    <target name="build">
        <exec program="${framework::get-framework-directory('net-3.5')}/msbuild.exe">
          <arg value="${Full.Path}\Code\MySolution.sln" />
          <arg value="/p:OutputPath=${Full.Path}\Output\" />
        </exec>
    </target>
</project>

Это будет успешно запущено; однако в моем решении, которое содержит веб-сайт и библиотеку классов, оно публикует библиотеку классов по указанному пути вывода, но все же публикует фактический веб-сайт в папке PrecompiledWeb по умолчанию.

У кого-нибудь есть предложения, как изменить путь к папке PrecompiledWeb с NAnt?

Еще раз спасибо всем, кто помог!

Редактировать 2 Окончательное решение

Вот что я наконец смог получить (обновлено для .net 4):

<exec program="${framework::get-framework-directory('net-4.0')}/msbuild.exe">
    <arg value="${Full.Path}\Code\MySolution.sln" />
    <arg value="/t:Rebuild" />
    <arg value="/t:ResolveReferences" />
    <arg value="/t:_CopyWebApplication" />
    <arg value="/p:OutDir=${Build.Output}bin\" />
    <arg value="/p:WebProjectOutputDir=${Build.Output}" />
    <arg value="/p:Configuration=Release" />
</exec>

Ответы [ 7 ]

9 голосов
/ 26 февраля 2009

Можно указать и переопределить некоторые свойства для msbuild. Чтобы указать выходной каталог, переопределите свойство OutputDir .

<target name="export" description="export code from svn">
        <delete dir="${Delete.Dir}" />
        <exec program="svn" commandline="export ${MySVN.Repos} ${MySVN.Dest}" />
        <msbuild project="${Solution.Filename}">
            <property name="Configuration" value="Release"/>
            <property name="OutputDir" value="${Output.Dir}"/>
        </msbuild>
</target>
7 голосов
/ 27 февраля 2009

Только что быстро взглянул на проект, помогает ли OutputPath вместо OutputDir?

Другим вариантом может быть проект веб-развертывания, который мне нравится, потому что он вызывает aspnet_compiler, а также компилятор C #, поэтому он обнаруживает проблемы, которые вы могли бы пропустить до развертывания.

5 голосов
/ 14 марта 2009

Скрипт сборки для одного из наших проектов использует эту команду для публикации веб-приложения:

msbuild.exe /t:_CopyWebApplication /p:Configuration=Release /p:OutDir=.\..\published\ /p:WebProjectOutputDir=.\..\published

(На данный момент текущим каталогом является каталог проекта веб-приложения, поэтому файл .csproj не указан. Все решение уже было перестроено ранее в скрипте.)

На первый взгляд, WebProjectOutputDir может быть необходимым свойством.

/ t: _CopyWebApplication также может быть важным. Я не использовал NAnt, поэтому я не знаю, можете ли вы передать этот параметр с помощью задачи msbuild. Возможно, вам потребуется использовать задачу exec, как в этом примере: http://www.netomatix.com/development/wapwithnant.aspx. Этот пример, кажется, восстанавливает и копирует все за один раз.

4 голосов
/ 13 июля 2009

При использовании задачи правильное имя свойства OutDir, а не OutputDir:

    <msbuild project="${Solution.Filename}">
        <property name="Configuration" value="Release"/>
        <property name="OutDir" value="${Output.Dir}"/>
    </msbuild>
1 голос
/ 14 марта 2009

Источником путаницы является то, что вы смешиваете две разные системы сборки. Ваша цель NAnt делегирует всю работу по выяснению того, как опубликовать ваше веб-приложение в файле решения, следовательно, путем расширения файлов csproj, на которые оно ссылается.

Файлы csproj являются файлами MsBuild, так что вам, вероятно, стоит поискать, как направить вывод вашего проекта. Это сообщение от dave ^ 2 может быть полезным в этом вопросе.

Вы можете публиковать свое веб-приложение в любом месте, используя NAnt, при условии, что оно выполняет публикацию. Вы можете сделать то же самое с MsBuild. Причина вашего затруднения в том, что в этом случае NAnt не выполняет публикацию, и вы позволяете файлу csproj определять местоположение вашего веб-каталога. Так что либо обойдите файл csproj и попросите NAnt (или MsBuild) опубликовать код; или измените файл csproj, чтобы опубликовать веб-приложение, где вы хотите; или создайте второе местоположение для своего веб-приложения и опубликуйте его там же, используя инструмент сборки.

AFAIK, эти варианты являются исчерпывающими.

0 голосов
/ 24 августа 2009

Попробуйте что-то вроде этого:

<property name="nant.settings.currentframework" value="net-3.5"/>    
<msbuild project="${Solution.Filename}">
    <property name="Configuration" value="Release"/>
    <property name="OutDir" value="${Full.Path}\Output\\"/>
    <property name="WebProjectOutputDir" value="${Full.Path}\Output\Web\\"/>
</msbuild>
0 голосов
/ 16 марта 2009

Хм, не знаю, как это сделать с MSBuild в Nant, но, используя NAnt, я делал это ранее так:

<solution solutionfile="${build.dir}\solution.sln">
    <webmap>
       <map url="http://localhost/somdir/project.csproj"
            path="c:\inetpub\wwwroot\somelocaldir" />
    <webmap>
</solution>

Но тогда вы используете решение задачи «Решение» NAnt вместо непосредственного использования MSBuild.

редактировать: Я также смотрю на некоторые опции msbuild; Если вы установите для OutDir & OutputPath одинаковое значение, что произойдет?

...