web.config の変換をローカルで実行したいのですが、どうやら変換はデプロイメントの実行時にのみ実行されるようです。
msbuild ターゲット「TransformWebConfig」を「再構築」プロセスを経ずに実行し、変換された web.config を出力するディレクトリを指定する方法を誰か知っていますか?
編集: Sayed の回答を使用して、.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
ツールバーにボタンを追加してこのバッチを実行したり、実行するためのショートカット キーを割り当てたりすることもできます。
ベストアンサー1
Web Publishing Pipelineを使用せずに構成ファイルを変換したい場合は、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 です。
あなたが言及したことの 1 つは、アプリの実行時にローカルで変換を実行できることです。パッケージ/公開時にのみ変換を実行する理由は、web.config 自体を変換した場合、次にアプリをデバッグするときに web.config が再び変換されるためです。たとえば、web.debug.config に config に値を追加する変換がある場合、最初に追加したときはすべて問題ありませんが、次にアプリを実行/デバッグするときに再び追加されます。したがって、これを避けるのが最善です。