Visual Studio 2010の組み込みデバッガーでWeb.debug.config
をマージして使用するにはどうすればよいですか?
これは既知のバグです。その機能は、現在、展開プロセスの一部としてのみ使用できます。
これに遭遇した場合は、賛成してください。できるだけ早く修正します。
これは実際には非常に簡単で、信じられないかもしれませんが、これがVSが機能するように設計されている方法のようです。
Web.configを含むプロジェクトの.csprojファイルの終了「Project」タグの直前に、次の行を逐語的に追加します。
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="Transform">
<MakeDir Directories="obj\$(Configuration)" Condition="!Exists('obj\$(Configuration)')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="obj\$(Configuration)\Web.config" StackTrace="true" />
</Target>
Web.configファイルを含むプロジェクトのプロジェクトプロパティのビルド後イベントに、次の行を逐語的に入力します。変換を実行するビルド構成ごとにこれを実行します。
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
xcopy "$(ProjectDir)obj\$(ConfigurationName)\Web.Config" "$(ProjectDir)". /F /R /Y
これを、タグの直前の.csprojファイルの最後に追加することで、より簡単な方法で解決しました。これはkeitnの答えに似ていますが、ビルド後のイベントを使用しないという違いがあります。
<Target Name="BeforeBuild">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
多くの同様の投稿を読んで、ファイルが上書きできない、または読み取り専用であるためweb.configにアクセスできないという問題が発生した後、これが私のために働いたものです:
<Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
<ItemGroup>
<OriginalWebConfig Include="$(ProjectDir)Web.config"/>
<TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
</ItemGroup>
<Exec Command=""$(DevEnvDir)tf.exe" checkout "$(ProjectDir)Web.config"" />
<Copy SourceFiles="@(OriginalWebConfig)" DestinationFiles="@(TempWebConfig)" />
<TransformXml Source="$(ProjectDir)TempWeb.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
ノート:
これは、BeforeBuildターゲットとして実行されます。
特定の構成(代替デバッグ環境)でのみ実行したいので、条件があるのはそのためです。 Web経由で展開する場合、公開ターゲットが起動し、このターゲットを実行する必要はありません。
Web.configをチェックアウトすることを覚えておく必要はありません(完了したら元に戻すだけです)。したがって、変換を開始する前にweb.configをチェックアウトします。 TFSを使用していない場合は、この行を削除できます。
VS(2010)\ msbuildはソースweb.configを手放したくないので、一時ファイルを使用します(情報についてはこの記事のおかげです: http://www.diaryofaninja.com/blog/ 2011/09/14/using-custom-webconfig-transformations-in-msbuild )
TempWeb.configを削除するコマンドを追加しようとしましたが、VS\msbuildはそれを手放したくありません。 TFSに追加されないので、私はそれで生きることができます。
プロジェクトのweb.configをbinフォルダーにあるものだけを更新したくなかったので、ここでそれを行いました。
.csprojの最後(プロジェクトの最後の終了タグの直前)に以下を追加します
<Target Name="Transform">
<MakeDir Directories="bin" Condition="!Exists('bin')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>
次に、次のビルド後の手順を追加します
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
これは、変換をビルドするときに、デバッグ/リリース構成から出力binディレクトリのWebsiteName.Configファイルに行われるため、プロジェクトのメインweb.configに干渉しないことを意味します。
私はこれが古いことを知っていますが、私は同じ問題に直面しています。デフォルトのWeb.configのエンドポイント、接続文字列などを置き換えるテスト、ステージング、ライブ構成があります。
しかし、私は次のことをします:
それはそれほど多くのステップではなく、あなたがそれのこつを得るとき、かなり速く行われます。お役に立てれば。 :)