Dot-Net

在 TFS 2010 或 msbuild 中觸發配置轉換

  • June 2, 2011

我正在嘗試在持續集成環境中使用配置轉換。

我需要一種方法來告訴 TFS 建構代理執行轉換。我有點希望它在發現配置轉換文件(web.qa-release.config、web.production-release.config 等……)後才能工作。但事實並非如此。

我有一個建構正確配置(qa-release、production-release 等)的 TFS 建構定義,並且我有一些在這些定義中建構的特定 .proj 文件,這些文件包含一些特定於環境的參數,例如:

<PropertyGroup Condition=" '$(Configuration)'=='production-release' ">
   <TargetHost Condition=" '$(TargetHost)'=='' ">qa.web</TargetHost>
   ...
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)'=='qa-release' ">
   <TargetHost Condition=" '$(TargetHost)'=='' ">production.web</TargetHost>
   ...
</PropertyGroup>

我從輸出中知道正在建構正確的配置。現在我只需要學習如何觸發配置轉換。是否有一些我可以添加到建構中的最終 .proj 以啟動轉換並刪除單個轉換文件的惡作劇?

我找到了另一種方法來完成此任務,而不是創建自定義活動。您只需要修改正在建構的 Web 應用程序的 Visual Studio 項目文件。

添加以下內容(可以在項目文件末尾找到“AfterBuild”目標的佔位符):

<Target Name="AfterBuild" Condition="$(IsAutoBuild)=='True'"> 
 <ItemGroup> 
        <DeleteAfterBuild Include="$(WebProjectOutputDir)\Web.*.config" /> 
 </ItemGroup> 
 <TransformXml Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(WebProjectOutputDir)\Web.config"/> 
 <Delete Files="@(DeleteAfterBuild)" />
</Target> 

然後,您只需添加/p:IsAutoBuild="True"到建構定義的“高級”部分中的“MSBuild Arguments”欄位。

這將強制 TFS 2010 在 TFS 進行建構時對 web.config 進行轉換。

更多細節可以在Kevin Daly 的部落格上找到。

我終於設法讓這個工作。我正在使用 TFS 2008,但也使用 MSBuild 4.0,所以它應該適合你。

首先,將此導入添加到 TFSBuild.proj:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

接下來,添加一個 BeforeDropBuild 目標:

<Target Name="BeforeDropBuild">
 <TransformXml Source="$(SolutionRoot)\MySite\Web.config"
   Transform="$(SolutionRoot)\MySite\Web.QA.config"
   Destination="$(OutDir)\_PublishedWebsites\MySite\Web.QA.config.transformed" />
</Target>

然後,您可以將 Web.QA.config.transformed 複製到您需要的任何位置。

引用自:https://stackoverflow.com/questions/1867107