9

我不想在所有構建服務器上安裝Slow Cheetah。自動慢獵豹構建方法

我們使用Slow Cheetah進行配置轉換,它工作得很好。它會生成多個app.config文件,並根據需要對它們進行更改。

我們已經設置好幾臺服務器。他們都有自己的代碼倉庫,他們從命令行拉取代碼並相應地構建包。這些代碼中有這些配置文件。但是,當我們從命令行編譯應用程序時,如果沒有安裝緩慢的獵豹,轉換不會生成包。否則,它工作正常。

我們永遠不知道,當我們建立一個新的服務器和新的用戶,所以它是不可能對他們中的每一個安裝慢獵豹

有可能以某種方式在應用和呼叫使用慢速獵豹DLL從它手動變換方法?

感謝

+0

你提到建立幾個app.config文件 - 可能是我正在尋找在http://stackoverflow.com/questions/12670498/slowcheetah-can-multiple-build-configs-share-one-配置轉換? :-) –

回答

4

我包括SlowCheetah在類似下面的應用程序,以避免它是構建解決方案安裝在服務器上:

  1. 在我的解決方案的根,我有一個文件夾工具包含(除其他外)SlowCheetah
    1. myProject的/工具/ SlowCheetah/SlowCheetah.Tasks.dll
    2. myProject的/工具/ SlowCheetah/SlowCheetah.Transforms.targets
  2. 在(基於web)應用項目的.csproj的文件,我有這個:

    <PropertyGroup> 
      <SlowCheetahTargets Condition=" '$(SlowCheetahTargets)'=='' ">$(MSBuildProjectDirectory)\..\Tools\SlowCheetah\SlowCheetah.Transforms.targets </SlowCheetahTargets> 
    </PropertyGroup> 

這:

<Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" /> 

..和它似乎處理工作非常好,即使在從TeamCity構建/發佈時也是如此。

編輯:

你會發現,當你已經安裝了SlowCheetah到Visual Studio中%localappdata%\Microsoft\MSBuild\SlowCheetah\v1drive:\Users\yourusername\AppData\Local\Microsoft\MSBuild\SlowCheetah\v1)中提到的兩個文件。

+0

什麼是SlowCheetah.Transforms.Targets,請引導我。謝謝 – MegaMind

+0

看我現在編輯 –

10

作爲SlowCheetah的替代方案,可以通過手動編輯項目文件來處理此功能。設置起來更麻煩一些,但這確實意味着你沒有額外的DLL。

在文本編輯器中打開項目文件。在項目文件的底部,剛剛結束標記之前,包括以下內容:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" /> 
<Target Name="AfterCompile" Condition="exists('app.$(Configuration).config')"> 
    <!-- Generate transformed app config in the intermediate directory --> 
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" /> 
    <!-- Force build process to use the transformed configuration file from now on. --> 
    <ItemGroup> 
     <AppConfigWithTargetPath Remove="app.config" /> 
     <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config"> 
      <TargetPath>$(TargetFileName).config</TargetPath> 
     </AppConfigWithTargetPath> 
    </ItemGroup> 
</Target> 

然後,找到你的項目文件中的行,並替換爲以下:

<ItemGroup> 
    <Content Include="App.config" /> 
    <Content Include="App.Debug.config"> 
     <DependentUpon>App.config</DependentUpon> 
    </Content> 
    <Content Include="App.Release.config"> 
     <DependentUpon>App.config</DependentUpon> 
    </Content> 
</ItemGroup> 

你」你需要爲你添加的每一個配置添加一個額外的內容包含 - 不幸的是,這種方法你沒有得到直接的「添加變換」上下文菜單。

之後,這是一個在您的項目目錄中創建文件的情況,然後您就可以開始了。它不像SlowCheetah那樣光滑,但它確實保持了代碼的可移植性。這裏定義

+6

實際上插入Microsoft.Web.Publishing.Tasks.dll作爲任務意味着你必須在生成服務器上安裝Visual Studio。這個DLL只附帶Visual Studio,不附帶.NET框架本身。所以你關於「不需要額外的DLL」的陳述是不正確的。 注:據我所知 - slowcheetah創建完全解決這個限制 - 有具體的任務來轉換configs \ XML,但開發人員不允許使用它除了與Visual Studio。我懷疑賽義德·易卜拉欣Hashimi開始slowcheetah因爲他不知道有關TransformXml任務。 –

+0

如果該.dll不存在,常規Web項目如何在生成機器上使用配置轉換進行編譯? (我承認我對此一無所知,我一直在構建機器上安裝VS.)我認爲SlowCheetah已經開始簡化這個過程 - 當然我上面描述的過程更加麻煩。 –

+1

做到了嗎? AFAIK - 項目編譯但沒有應用轉換。是的,這就是爲什麼我們所有的構建代理都安裝了VS的原因。實際上,VS與web.config轉換和SlowCheetah有什麼不同。糾正我,如果我錯了,但VS只是已經鎖定了這個功能的web.configs,它實際上適用於任何類型的XML文件。我使用這個任務來轉換不僅Azure ServiceDefinition和ServiceConfiguration,而且生成生成時間轉換以在共享測試服務器上運行azure模擬器實例 - 痛苦但可實現的任務 –

4

最新版本SlowCheetah的(2.5.14)可以用Nuget。通過nuget添加時,它將存儲在本地解決方案目錄中的packages文件夾中(與所有nuget軟件包一樣),這意味着它現在可以在任何現成的構建服務器上運行。