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


回答:


92

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

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

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


16
記録として、これはバグではなく、仕様によるものです。これらのファイルはパッケージ/公開用です。しかし、それは誰もがアイテムに投票することを思いとどまらせるべきではありません。
イブラヒム橋見

26
私にとってそれはバグです、そうでなければローカルサーバーでのデバッグ/リリース変換の目的は何ですか?時々デザインが間違っている、それはそれが正しいことを意味しない:)
スクリプトの主2012年

4
この問題は、Githubを使用していて、同期時にweb.configを無視する必要がある場合に発生します。しかし、それはバックアップを持つという目的を打ち破ります-つまり、私がGithubを使用する理由です。ここで、シナリオにAppHarborを追加し、2種類のweb.configファイルをサポートする必要があります。これは、apikeyをGithubで公開する必要があるため、同期して公開する前に構成の値を置き換える必要があるためです。それは問題です。設定で値を置き換えて誤って同期するのを忘れて、何を推測しますか?あなたのapikeysはちょうど公開リポジトリになりました。うん、なんて問題だ。
David Robbins

8
MS Connectへのリンクが壊れています
Michael Freidgeim 2013年

17
@LordofScripts:バグが「設計どおりに」閉じられると、「設計にバグがあります」と言いたいことがあります。
ロイティンカー2014年

34

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

1
プロジェクトパスにスペースが含まれている場合のエラーを回避するために、$(ProjectDir)と$(ProjectPath)の前後に二重引用符を追加することをお勧めします。
アレクサンダープロコフィエフ2013


このアプローチを使用して変換を機能させることはできますが、ブレークポイントに到達することはできません。デバッグをtrueに設定しましたが、ブレークポイントに到達したことがなく、「ブレークポイントは現在ヒットしません。このドキュメントのシンボルはロードされていません。」というメッセージが表示されます。これはカスタム構成でのみ発生し、構成を「デバッグ」に設定すると問題なく機能します。何か案は?
mithun_daa 2014

1
それを機能させるには、$(MSBUILDBINPATH)の前後に二重引用符を追加する必要がありました。そうしないと、コード9009で終了します
sotn

6
これは元のを置き換えるWeb.configため、すべての変換は「べき等」である必要があることに注意してください(他の変換の結果に再適用できます)。また、ファイルをソース管理に置いた場合(おそらくそうすべきですが)、正気を保つことができなくなります。全体として、複雑さ/痛みを次の一連の問題に移す「単純な」ハック。そこで「より良く」取り組むことができれば良いが、そうでなければ悪い。また、VSバージョンをハードコーディングする代わりに$(VisualStudioVersion)を使用することを検討してください(変更するのを忘れます)。
TNE

16

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

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

3
確認済み、動作します。ただし、注意してください。Web.configのローカルコピーが変更されます。したがって、RemoveAttributesなどのXSLT変換を使用している場合は、完全に削除されます。
SetAttributesで

これはまさに私が探していたものでした。シンプルでポイントにまっすぐ。他のすべてのソリューションがそれほど複雑でなければならない理由がわかりません。
David Carrigan 2017

<Target name = "AfterBuild">セクションでこのアクションを元に戻す方法を知っている人はいますか?
キャメロンベルト

1
これが答えになるはずです。
キャメロンベルト

2

プロジェクトの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
これにより、binディレクトリの構成が変換されますが、残念ながら、この構成は使用されません。ロードされる構成は、実際にはプロジェクトフォルダー内のWeb.Configであり、binディレクトリ内のものではありません。
ミック

2

多くの同様の投稿を読み、ファイルを上書きできない、または読み取り専用であるために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に追加されないので、私はそれと一緒に暮らすことができます。


このエラーが発生しましたThe command ""C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\tf.exe" checkout "C:\_Code\RTS\SCTimeSheet\Web.config"" exited with code 9009。何か案は?
sky 9120年

1

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

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

  • 目的の変換構成(Web.Live.configなど)を右クリックします。
  • 「プレビュー変換」をクリックします
  • すべてを右からコピーします(これは、Web.configが変換でどのように見えるかです)
    • CTRL + A + CTRL + C
  • Web.configファイルを開きます(デフォルトは1つ)
  • すべてを選択し(CTRL + A)、貼り付けます(CTRL + V)
  • 実行

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


私が正しく理解していれば、これは元のweb.configファイルへの破壊的な変更です。質問のコンテキストでは、これらの手順は、デバッグセッションが開始されるたびに実行する必要があります。
Red Taz 2015年

-1

@ologesa:ソリューションには元のWeb.configへの書き込みアクセスが必要です(TFSでチェックアウトする必要があります)。より良い解決策は、keitnがこれを行うように、binフォルダーにWeb.configを直接生成することです。keitnとあなたのソリューションを組み合わせると、次のようになります。

<Target Name="BeforeBuild">
    <Message Text="Transforming Web.config from Web.$(Configuration).config" Importance="high" />
    <MakeDir Directories="bin" Condition="!Exists('bin')" />
    <TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>

3
いいでしょうが、ミックがコメントしたように。このファイルは使用されません。アプリケーションまたはIISにこの構成ファイルを使用させるにはどうすればよいですか?
HMR
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.