Asp.net

使 Web.config 轉換在本地工作

  • August 31, 2010

我想讓 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 中,您具有向配置添加值的轉換,那麼第一次添加時一切正常,但下次執行/調試應用程序時,它將再次添加。所以最好避免這種情況。

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