2009-02-25 60 views
6

我是新來的南特,並已能夠創建一個<target>楠<msbuild>自定義輸出目錄

1)刪除任何代碼從當前文件夾

2)出口新鮮代碼從SVN

3)建立默認目錄中的代碼,其是PrecompiledWeb文件夾(其一個Web應用程序)

這:

<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」等)。這是可能的,你能告訴我必要的標籤/財產嗎?

謝謝!

編輯

感謝斯科特和Si,我越來越接近一個解決方案,但我仍然沒有任何工作。有評論導致我在MSBuild's Output Path Property這篇文章。使用他們的代碼:

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

這將成功運行;然而,在我的解決方案包含一個網站和一個類庫,它出版的類庫的DLL到指定的輸出路徑,但它仍然發佈實際網站的默認文件夾PrecompiledWeb。

沒有人有如何改變來自南特的PrecompiledWeb文件夾路徑有什麼建議?

再次感謝大家誰的幫助!

編輯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> 
+0

如果使用網絡部署項目,您可以定義OutputPath爲整個網站。除此之外,也許您需要深入研究Microsoft MSBuild腳本? – si618 2009-03-13 22:57:51

回答

8

一個可以指定,並覆蓋部分的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> 
+0

也許我做錯了什麼,但即使添加該屬性標記後,它仍然發佈到解決方案文件夾內的PrecompiledWeb文件夾。你有什麼想法,爲什麼這可能是?感謝您的幫助,無論。 – 2009-02-25 22:43:38

+0

這是一個網絡解決方案嗎? – 2009-02-26 17:03:50

7

剛剛有了一個項目快速瀏覽一下,並OutputPath代替OutputDir幫助嗎?

另一種選擇可能是一個網絡部署項目,這是我喜歡的,因爲它要求aspnet_compiler以及C#編譯器,所以它拿起,你可能遺漏的,直到部署問題。

4

我們的項目之一,在構建腳本使用此命令發佈Web應用程序:

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

(當前目錄設置爲在這一點上的Web應用程序的項目目錄,這就是爲什麼沒有的.csproj文件被指定,整個解決方案已經在腳本的早期被重建。)

通過它的聲音,WebProjectOutputDir可能是你需要的屬性。

/t:_CopyWebApplication也可能很重要。我沒有使用NAnt,所以我不知道你是否可以通過msbuild任務傳遞這個參數。您可能需要使用exec任務,如本例中所示:http://www.netomatix.com/development/wapwithnant.aspx。這個例子似乎重建並一次全部複製。

1

混淆的一個原因是您正在混合兩個不同的構建系統。您的NAnt目標是委派所有工作來確定如何將您的Web應用程序發佈到解決方案文件,從而擴展到它引用的csproj文件。

csproj文件是MsBuild文件,所以你應該看看如何指導你的項目輸出。 This post by dave^2可能對此問題有所幫助。

您可以使用NAnt發佈您的Web應用程序,只要它正在進行發佈。你可以用MsBuild做同樣的事情。你的困惑的原因是NAnt是而不是在這種情況下正在發佈,你讓csproj文件確定你的web目錄的位置。因此繞過csproj文件並讓NAnt(或MsBuild)發佈代碼;或者修改csproj文件以在需要的地方發佈Web應用程序;或爲您的Web應用程序創建第二個位置,然後使用您的構建工具發佈它。

AFAIK,這些選項是詳盡的。

0

嗯,不知道如何使用的MSBuild做,在南特,但使用楠,我以前也做過這樣的:

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

但是,你正在使用的惡性「的解決方案'任務offcourse而不是直接使用MSBuild。

編輯: 我也看看一些msbuild選項; 如果您將OutDir & OutputPath設置爲相同的值,會發生什麼情況?

3

當使用任務,正確的屬性名稱是OUTDIR,不OutputDir:

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

嘗試是這樣的:

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