2009-02-25 14 views
6

Jestem nowy NAnt i udało się stworzyć <target> któryNAnt <msbuild> niestandardowy katalog wyjściowy

1) Usuwa dowolny kod z bieżącym folderze

2) Wywóz kod świeże z SVN

3) Buduje kod w domyślnym katalogu, który jest folderem PrecompiledWeb (jej aplikacja internetowa)

Oto ona:

<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> 

Chcę określić niestandardowy katalog wyjściowy (inny niż "PrecompiledWeb"). Czy to możliwe i czy mógłbyś pokazać mi niezbędny tag/właściwość?

Dziękujemy!

EDIT

Dzięki Scott i Si, jestem coraz bliżej do rozwiązania, ale nadal nie ma niczego, co działa. Tam komentarze doprowadziły mnie do tego artykułu na temat MSBuild's Output Path Property. Używając ich kodu:

<?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> 

To się powiedzie; Jednak w moim rozwiązaniu, które zawiera witrynę WWW i bibliotekę klas, publikuje bibliotekę DLL biblioteki klasy do określonej ścieżki wyjściowej, ale nadal publikuje rzeczywistą witrynę internetową do domyślnego folderu PrecompiledWeb.

Czy ktoś ma jakieś sugestie, jak zmienić ścieżkę folderu PrecompiledWeb z NAnt?

Jeszcze raz dziękuję wszystkim, którzy pomogli!

Edycja 2 Ostateczne rozwiązanie

Oto co w końcu udało mi się dostać pracę (aktualizacja 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> 
+0

Jeśli używasz projektu wdrożenia internetowej można zdefiniować OutputPath dla cała strona internetowa. Poza tym, być może będziesz musiał zagłębić się w skrypty Microsoft MSBuild? – si618

Odpowiedz

8

Można określić i zastąpić niektóre właściwości dla msbuild. W celu określenia katalogu wyjściowego należy zastąpić właściwość OutputDir 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> 
+0

Może robię coś nie tak, ale nawet po dodaniu tego znacznika właściwości, nadal publikuje on do folderu PrecompiledWeb wewnątrz folderu rozwiązania. Czy masz pojęcie, dlaczego tak się dzieje? Dzięki za pomoc, niezależnie. –

+0

Czy to jest rozwiązanie internetowe? –

+0

Ahh ... właśnie zobaczyłem w twojej odpowiedzi, że to rzeczywiście jest aplikacja internetowa. –

7

Wystarczy kilka szybkich okiem na projekt, nie OutputPath zamiast OutputDir pomóc?

Inną opcją może być projekt wdrożenia WWW, który podoba mi się, ponieważ wywołuje on program aspnet_compiler, a także kompilator C#, dzięki czemu podejmuje problemy, których nie można pominąć do czasu wdrożenia.

4

Skrypt build dla jednego z naszych projektów używa tego polecenia, aby opublikować aplikację internetową:

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

(Bieżący katalog jest ustawiony do katalogu projektu aplikacji internetowej w tym momencie, dlatego nie .csproj plik jest określony, całe rozwiązanie zostało już wcześniej przebudowane w skrypcie.)

Pod tym względem WebProjectOutputDir może być właściwkiem, którego potrzebujesz.

/t: _CopyWebApplication może również być ważne. Nie użyłem NAnt, więc nie wiem, czy możesz przekazać ten parametr za pomocą zadania msbuild. Może być konieczne użycie zadania exec, jak w tym przykładzie: http://www.netomatix.com/development/wapwithnant.aspx. Ten przykład wydaje się przebudowywać i kopiować wszystko za jednym razem.

1

Źródłem zamieszania jest mieszanie dwóch różnych systemów kompilacji. Twój cel NAnt deleguje całą pracę polegającą na tym, jak opublikować twoją aplikację internetową w pliku rozwiązania, a więc przez rozszerzenie na pliki csproj, do których się odwołuje.

Pliki csproj są plikami MsBuild, więc powinieneś tam zajrzeć, by wskazać sposób, w jaki kierujesz wyjściem projektu. This post by dave^2 może być pomocne w tym przypadku.

Możesz opublikować swoją aplikację internetową, gdziekolwiek chcesz, używając NAnt, pod warunkiem, że publikuje. Możesz zrobić to samo z MsBuild. Przyczyną twojego dylematu jest to, że NAnt jest , a nie robi publikowanie w tym przypadku i pozwalasz plikowi csproj określić położenie twojego katalogu. Więc albo obejść plik csproj i niech NAnt (lub MsBuild) opublikuje kod; lub zmodyfikuj plik csproj, aby opublikować aplikację internetową, gdzie chcesz; lub wykonaj drugą lokalizację dla swojej aplikacji internetowej i opublikuj ją tam również za pomocą narzędzia do budowania.

AFAIK, te opcje są wyczerpujące.

0

Hmm, nie wiem, jak to zrobić z MSBuild w Nant, ale przy użyciu NAnt, robiłem to wcześniej tak:

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

Ale wtedy, używasz Rozwiązanie NANT” 'Zadanie zamiast korzystania z MSBuild bezpośrednio.

Edytowanie: Mam również spojrzenie na niektóre opcje msbuild; Jeśli ustawisz OutDir & OutputPath na tę samą wartość, co się stanie?

+0

Dzięki, ale jest to projekt .NET 3.5 i nie sądzę, że tag obsługuje .NET 3.5. –

3

Podczas korzystania z zadania, prawidłowa nazwa właściwości jest OUTDIR nie OutputDir:

<msbuild project="${Solution.Filename}"> 
     <property name="Configuration" value="Release"/> 
     <property name="OutDir" value="${Output.Dir}"/> 
    </msbuild> 
0

Spróbuj czegoś takiego:

<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>