2011-06-15 38 views
6

目前我們有4種不同的環境(Lab,Test,Stage,LIVE),我們已經使用Nant/CC.Net實現了自動部署。我正在調查並研究如何使用新的MSDeploy工具更有效地完成哪些工作。MSD將所有配置文件[.config文件]集中在一個包中

我想實現的是創建一個配置文件夾中的包內,我們將有各種不同的配置文件爲所有可能的環境(基本上將所有的配置轉換文件)

我想達到什麼是我們的企業環境中的自動部署,其中開發團隊無法訪問將要部署的服務器。我們只需將預定義的指令移交給部署包,以便如何安裝包。

什麼是您能想到的最佳方法。我們不使用TFS,也不希望自動構建過程依賴於任何過程,除了MSDeploy或其他易於替換的過程。也想使用MSBuild。

+0

看看下面解決的實現 – DotNetInfo 2011-06-20 01:08:40

回答

8

您可以使用下面的解決方案來實現它。在這之間,我得到了我長期閱讀的最好的書籍之一的指導。 Book is 「由微軟構建引擎內部」由Sayed Ibrahim Hashimi和William Bartholomew撰寫。本書以優秀的方式閱讀細節。

創建的MSBuild凸出文件如下圖所示

<?xml version="1.0" encoding="utf-8"?> 

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

    <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/> 

    <PropertyGroup> 
    <DestDirectory>C:\Temp\DeployPackage\TRANSFORM_CONFIGS\</DestDirectory> 
    </PropertyGroup> 

    <ItemGroup> 
    <TransformFiles Include="$(FilesToTransform)"/> 
    </ItemGroup> 

    <Target Name="TransformAll" DependsOnTargets="ValidateSettings"> 
    <MakeDir Directories="$(DestDirectory)"/> 
    <TransformXml Source="..\web.config" 
        Transform="%(TransformFiles.Identity)" 
        Destination="@(TransformFiles->'$(DestDirectory)%(Filename).transformed.config')" /> 
    </Target> 

    <Target Name="ValidateSettings"> 
    <Error Text="FilesToTransform cannot be empty" 
      Condition=" '$(FilesToTransform)'=='' "/> 
    <Error Text="Couldn't find transform file at [%(TransformFiles.Fullpath)]" 
      Condition =" !Exists('%(TransformFiles.Fullpath)') "/> 
    </Target> 

</Project> 

文件夾中添加上述PROJ文件並添加您的環境特定的文件後,只需運行下面經過的MSBuild訪問命令行

msbuild transform.proj /t:TransformAll /p:FilesToTransform="Lab.config;Test.config;Live.config" 

希望這有助於。不要忘記購買/引用「Inside the Microsoft Build Engine」一書。

+0

嘿,謝謝你對本書的讚美。我很高興你發現它有幫助。 – 2011-07-01 06:06:22

+0

我的榮幸和男士,你對構建引擎有着深入的瞭解,並且非常感謝你在知識共享方面的努力。書很優秀 – DotNetInfo 2011-07-01 12:11:41

+0

我並不積極,但您可能需要在64位環境中使用MSBuildExtensionsPath32。 – TrueWill 2012-03-28 22:29:12

0

一種可能性是自定義安裝程序,以便顯示的第一個對話框允許用戶選擇要安裝的環境。根據該決定,相應的文件將被複制到安裝目錄並重命名。

+0

我不打算使用任何形式的安裝程序來部署文件。基本上,我的目標是創建一個包[使用Config文件夾&stage.config,test.config,production.config文件]。 – DotNetInfo 2011-06-16 23:05:40

0

我不是100%確定你在找什麼。

您是否想要一個根配置文件,它是從包含所有環境特定設置的「主」文件更新的?你應該看看XmlPreProcessor http://xmlpreprocess.sourceforge.net/

除了Pedro的評論,你還可以在所有的服務器上放一個註冊表鍵,說明服務器屬於哪個環境。如果您執行完全腳本化的部署,那麼軟件包將從該註冊表項中選取環境,併爲該環境生成正確的配置。節省人類選擇環境的步驟。

+0

我不打算使用任何形式的安裝程序來部署文件。基本上,我的目標是創建一個包[使用Config文件夾&stage.config,test.config,production.config文件]。我想我今天應該完成我的任務,並且很快會發布答案 – DotNetInfo 2011-06-16 23:06:24

相關問題