2011-05-02 65 views
15

我有一個網站(不是web application,它是一個website),我想從command prompt發佈。如何使用命令提示符使用MSBuild?

我想發佈它在同一個目錄(每天晚上),我不想使用像TeamCity,TFS或Nant等第三方工具的構建自動化工具。

它應該用MSBuild完成。

我該怎麼做?

更新:在發佈的窗口,應檢查唯一的選擇就是Use Fixed naming and single page assemblies

+0

它應該是這樣的:** msbuild Portal.sln **或** msbuild網站** – 2011-05-02 08:21:21

回答

21

從您的意見,您的Web項目是一個網站項目,而不是一個Web應用程序項目。

在這種情況下,'Publish'目標不能作爲選項,但'AspNetCompiler'是解決方案。

創建一個包含以下內容的xml文件,並從MSBuild中調用它。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="PrecompileWeb"> 
     <AspNetCompiler 
      VirtualPath="/MyWebSite" 
      PhysicalPath="c:\inetpub\wwwroot\MyWebSite\" 
      TargetPath="c:\precompiledweb\MyWebSite\" 
      Force="true" 
      Debug="true" 
      FixedNames="True" 
     /> 
    </Target> 
</Project> 

對此任務的引用是here,您可以配置所有取消選中選項。

FixedName =「True」等於檢查'使用固定命名和單頁...'選項。

然後您從MSBuild而不是解決方案文件調用此文件。

MSBuild your.xml /p:Configuration=<Debug/Release> 

只要您的類庫被您的網站項目引用,它們就會一起構建。

+0

我的解決方案包含4個'class projects'和一個網站,我想先構建項目然後發佈網站。你能爲這個塞納里奧寫一個psudo代碼嗎?發佈的唯一設置是**使用固定命名和單個頁面程序集**和其他複選框不應該被選中。預先感謝您 – 2011-05-02 08:36:47

+0

您的答案是我正在查找的內容,但不幸的是,當我運行您的命令(** MSBuild命令**)時,我遇到了一個錯誤,**'此應用程序已經預編譯**。它是什麼。 – 2011-05-02 09:38:24

+0

通過從路徑中刪除PrecomciledWeb.Config解決了我的問題。 – 2011-05-02 09:49:31

5
MSBuild.exe **MYPROJ**.sln 
/p:outdir="Z:\output\\",OutputPath="Z:\output\\",webprojectoutputdir="Z:\output\\",configuration=RELEASE 
/t:Clean;Build 

/flp1:logfile=Z:\output\\\Log_msbuild.log;verbosity=detailed 
/flp2:logfile=Z:\output\\\Log_warnings.log;warningsonly;verbosity=detailed 
/flp3:logfile=Z:\output\\\Log_errors.log;errorsonly;verbosity=detailed 

/nologo 
/noconlog 

它可以編譯的項目的所有類型(網頁,Web服務,臺式機,..),它可以創建日誌文件爲(buildlog,錯誤和警告)。

1

對不起,延遲迴復,並感謝您的輸入阿蘭。不幸的是你的建議沒有工作,所以最後我做了以下內容:

  • 選擇This build does not copy output files to a drop folder生成默認選項卡
  • 下使用默認模板中的進程選項卡下
  • 選擇AsConfigured作爲Output location下的值2. Build進程選項卡
  • 使用此MSBuild的參數字符串下:

    /p:DeployOnBuild=True;DeployTarget=PipelinePreDeployCopyAllFilesToOneFolder;PackageTempRootDir="\\192.168.x.x\Nightly\MainBranch";AutoParameterizationWebConfigConnectionStrings=false

此結果是我用作測試站點的webroot的以下文件夾:\\192.168.x.x\Nightly\MainBranch\PackageTmp。 這顯然不是最佳的,因爲我寧願沒有PackageTmp文件夾,我也沒有測試在同一個解決方案中有多個Web應用程序時會發生什麼情況,但我不能在這個問題上使用更多時間。

我真的不明白爲什麼微軟將這麼簡單的任務變得如此複雜。

相關問題