web-dev-qa-db-ja.com

組み込みのVisual StudioデバッガーサーバーでWeb.debug.configを使用するにはどうすればよいですか?

Visual Studio 2010の組み込みデバッガーでWeb.debug.configをマージして使用するにはどうすればよいですか?

75
stacker

これは既知のバグです。その機能は、現在、展開プロセスの一部としてのみ使用できます。

https://connect.Microsoft.com/VisualStudio/feedback/details/523221/have-web-debug-config-apply-during-development

これに遭遇した場合は、賛成してください。できるだけ早く修正します。

92
stacker

これは実際には非常に簡単で、信じられないかもしれませんが、これが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
34
stuckintheshuck

これを、タグの直前の.csprojファイルの最後に追加することで、より簡単な方法で解決しました。これはkeitnの答えに似ていますが、ビルド後のイベントを使用しないという違いがあります。

<Target Name="BeforeBuild">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
15
ologesa

多くの同様の投稿を読んで、ファイルが上書きできない、または読み取り専用であるためweb.configにアクセスできないという問題が発生した後、これが私のために働いたものです:

  <Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
    <ItemGroup>
      <OriginalWebConfig Include="$(ProjectDir)Web.config"/>
      <TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
    </ItemGroup>
    <Exec Command="&quot;$(DevEnvDir)tf.exe&quot; checkout &quot;$(ProjectDir)Web.config&quot;" />
    <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に追加されないので、私はそれで生きることができます。

2
Mike Cheel

プロジェクトの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に干渉しないことを意味します。

2
keitn

私はこれが古いことを知っていますが、私は同じ問題に直面しています。デフォルトのWeb.configのエンドポイント、接続文字列などを置き換えるテスト、ステージング、ライブ構成があります。

しかし、私は次のことをします:

  • 目的の変換構成を右クリックします(例Web.Live.config
  • "Preview Transform"をクリックします
  • すべてを右からコピーします(Web.configが変換でどのように見えるかです)
    • Ctrl + A + Ctrl + C
  • Web.configファイルを開きます(デフォルトのファイル)
  • すべてを選択し(CTRL + A)、貼り付けます(CTRL + V)
  • 走る

それはそれほど多くのステップではなく、あなたがそれのこつを得るとき、かなり速く行われます。お役に立てれば。 :)

1
Gaui