Dot-Net
在 TFS 2010 或 msbuild 中觸發配置轉換
我正在嘗試在持續集成環境中使用配置轉換。
我需要一種方法來告訴 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 複製到您需要的任何位置。