使 Web.config 轉換在本地工作
我想讓 web.config 轉換在本地工作,但顯然只有在部署時才會發生轉換。
有沒有人知道在不經過“重建”過程的情況下執行 msbuild 目標“TransformWebConfig”的方法,並且還指定和輸出目錄來吐出轉換後的 web.config?
編輯:使用賽義德的回答,我創建了一個
.bat文件來為我執行任務:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig copy /Y "D:\Demo\Web.config" "D:\MyProject\Web.config" del ""D:\Demo\Web.config"“Transformation.proj”是下面答案中 Sayed 程式碼片段的副本。只需指定轉換的源、目標和目的地。新文件,在這種情況下,轉換後的“web.config”將位於“D:\Demo”目錄中。我只是將它複製過來以覆蓋我項目的 web.config,最後刪除“demo”文件夾中生成的文件。
另外,我創建了一個宏來執行這個批處理文件並為我執行轉換:
Public Module DoTransform Sub RunTransformBatchFile() Try Process.Start("D:\Demo\RunTransform.bat") Catch ex As System.Exception MsgBox(ex.Message) End Try End Sub End Module您還可以在工具欄上添加一個按鈕來執行此批處理和/或分配一個快捷鍵來執行。
如果您想在不使用 Web 發布管道的情況下轉換配置文件,那麼您只需手動使用 TransformXml 任務。我已經在http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx上寫了一篇詳細的部落格文章,但這裡是重點:
<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/> <Target Name="Demo"> <TransformXml Source="app.config" Transform="Transform.xml" Destination="app.prod.config"/> </Target> </Project>在這裡,我使用 transform.xml 文件手動轉換 app.config 文件,目標文件是 app.prod.config。
您提到的一件事是在執行應用程序時能夠在本地進行轉換。我們只對 package/publish 執行轉換的原因是,如果我們轉換了 web.config 本身,那麼下次調試應用程序時,web.config 會再次轉換。因此,例如,如果在您的 web.debug.config 中,您具有向配置添加值的轉換,那麼第一次添加時一切正常,但下次執行/調試應用程序時,它將再次添加。所以最好避免這種情況。