0

我已閱讀了幾個good posts關於自動化構建過程,但是,我感興趣的不僅僅是構建過程,還包括髮布。自動發佈Visual Studio 2010功能?

我有幾個使用基本模型的網站和服務。當我改變這個模型時(這種情況不會經常發生),所有的站點/服務都必須重建併發布到合適的目標目錄(已經包含在他們的配置中)。

所有項目文件夾都存在於一個文件夾中。

我正在考慮的方法是使用MSBuild從主文件夾運行腳本,並使用要構建/發佈的項目的命名列表。

我發現爲MSBuild here創建構建腳本的一個很好的例子,但是,這隻能滿足一個項目的構建。

我將如何通過項目/目錄的命名列表來執行相同的構建/發佈腳本?

謝謝。

+1

您是否考慮過創建解決方案? MSBuild也知道如何構建它們。 – 2011-12-15 17:57:52

+0

這讓我走上了另一條軌道......我會檢查出來的,謝謝。 – ElHaix 2011-12-16 17:34:26

回答

0

所以我終於有時間再看看這個。

我創建了以下MSBuild腳本,它位於我擁有的所有網站的相同級別的文件夾中。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 


    <Target Name ="DeleteFiles"> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\debug\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\release\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).pdb"></Delete> 
    </Target> 

    <Target Name="Compile" DependsOnTargets="DeleteFiles"> 
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj" 
     Targets="Clean;Build" 
     Properties="OutputPath=..\$(ProjectName)\bin"/> 
    </Target> 

    <Target Name="Deploy" DependsOnTargets="Compile"> 
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj" 
     Targets="ResolveReferences;_CopyWebApplication" 
     Properties="OutDir=C:\inetpub\wwwroot\$(ProjectName)\bin\;WebProjectOutputDir=C:\inetpub\wwwroot\$(ProjectName)" /> 
    </Target> 


</Project> 

,被稱爲是這樣的:

的MSBuild的build.xml /p:ProjectName="websitetopublish.com」/V:N

一個網站的偉大工程,但是我想要一個批處理相關的解決方案來讀取文本文件。對於該文本文件中的每個條目執行構建過程。

我很容易寫一個.Net控制檯應用程序到這個,但矯枉過正,我想知道如何使用一些循環機制在批處理文件中完成此操作。

0

使用一個<ItemGroup />元素與自定義元數據產生類似如下:

<ItemGroup> 
     <ProjectToPublish Include="WebApplication1\WebApplication1.csproj" > 
       <OutputDir>OutputDir1</OutputDir> 
     </ProjectToPublish> 
     <ProjectToPublish Include="WebApplication2\WebApplication2.csproj" > 
       <OutputDir>OutputDir2</OutputDir> 
     </ProjectToPublish> 
    </ItemGroup> 

    <Target Name="Publish" Inputs="@(ProjectsToPublish)" Outputs="%(Identity).Dummy"> 
     <RemoveDir Directories="%(OutputDir)" ContinueOnError="true" /> 
     <MSBuild Projects="%(Identity)" 
     Targets="ResolveReferences;_CopyWebApplication" 
     Properties="WebProjectOutputDir=$(OutputDir); 
     OutDir=%(OutputDir)\" /> 
    </Target> 
1

最終的可重用解決方案如下。

回顧:

我有一個根文件夾誰的目錄和項目文件的名稱都被命名爲網站的價值的幾個地點。我希望能夠從命令行發佈所有網站(或選定的列表) - 運行腳本。這些網站將被髮布到我的IIS服務器目錄。

首先,創建一個MSBuild的腳本,需要在網站名稱的參數:

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

    <Target Name ="DeleteFiles"> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\debug\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\release\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).dll"></Delete> 
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).pdb"></Delete> 
    </Target> 

    <Target Name="Compile" DependsOnTargets="DeleteFiles"> 
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj" 
     Targets="Clean;Build" 
     Properties="OutputPath=..\$(ProjectName)\bin"/> 
    </Target> 

    <Target Name="Deploy" DependsOnTargets="Compile"> 
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj" 
     Targets="ResolveReferences;_CopyWebApplication" 
     Properties="OutDir=C:\inetpub\wwwroot\$(ProjectName)\bin\;WebProjectOutputDir=C:\inetpub\wwwroot\$(ProjectName)" /> 
    </Target> 

</Project> 

接下來,創建每行一個網站名稱的文本文件。這可以通過執行「dir> sites.txt」然後列編輯出多餘的內容來輕鬆生成。

即。

​​

最後,創建一個包含在sites.txt遍歷列表的批處理文件,並執行腳本的MSBuild:

@echo -------------------------------------------- 
@echo -- Iterating through list in sites.txt -- 
@echo -------------------------------------------- 
for /f %%X in (sites.txt) do msbuild build.xml /p:ProjectName="%%X" /v:n 

該解決方案駐留在目錄上的同一水平其餘的網站來自根目錄,這就是爲什麼構建腳本中的「.. \ $(ProjectName)」。

發佈一堆網站的好方法,並希望這可以幫助某人。