29

Entity Framework 経由でリモート データベースに接続する ASP.NET Web アプリケーション プロジェクトがあります。デバッグ中 (例: ローカル コンピューターでプロジェクトを実行中)、データベースへの IP アドレスは、リリース中 (例: プロジェクトを Web サーバーにアップロードしてブラウザーから実行した後) とは異なります。これまで、私は常に Web.config ファイルのデータベース接続文字列を手動で変更して、2 つを切り替えていました (基本的には、接続文字列を 1 つは 'Debug'、もう 1 つは 'Release' という名前で、デプロイするたびに名前を交換する必要がありました)。 )。

ここで、変更された接続文字列を Web.Release.config バージョンに配置するWeb.config Transformation Syntaxを介して、これを自動的に実行できるようにする必要があることに気付きました。その後、リリース構成で DLL をビルドするときにそれを使用する必要があります。 .

しかし、それは私にはうまくいかないようです...

これは、通常の Web.config ファイル (ローカルで使用するためのデバッグ接続文字列を保持する) の関連部分です。

<?xml version="1.0"?>
<configuration>

  <connectionStrings>
    <!-- Debug connection string. Release connection string is in Web.Release.config file -->
    <add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" />
  </connectionStrings>

</configuration>

以下は Web.Release.config ファイルです。例によれば、DLL がリリース モードの場合、'DatabaseEntities' 接続文字列 "A" を "B" に置き換える必要があります。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <!-- Replace the DatabaseEntities connection string with the Release version (local IP address) -->
  <connectionStrings>
    <add name="DatabaseEntities"
      connectionString="B"
      xdt:Transform="Replace" xdt:Locator="Match(name)"/>
  </connectionStrings>

</configuration>

(明らかに、「A」と「B」は実際の接続文字列の単なるプレースホルダーです)

アプリケーションをデバッグすると (たとえば、F5 キーを押すだけ)、既定の Web.config が使用され、データベースにアクセスできます。次に、構成マネージャーを使用してビルド構成をリリースに変更します。ソリューション内のすべてのプロジェクトは、リリース構成に設定されています。次に、ソリューションをビルドします (ビルドのみ、または完全なリビルド (例: クリーン、リビルド) を介して)。新しく構築した DLL と Web.config および Web.Release.config ファイルを Web サーバーにアップロードします。データベースにアクセスしようとすると、デバッグ IP アドレスを介してデータベースにアクセスしようとします。したがって、それを見つけることができません...

Web.Release.config ファイルが完全に無視されているか、少なくとも接続文字列が置き換えられていないようです。

私は何を間違っていますか?変換構文が間違っていますか? リリース モードでアプリケーションを正しくビルドしていませんか?

4

6 に答える 6

51

次に、ソリューションをビルドします(ビルドを介して、または完全な再構築(Clean、Rebuildなど)を介して)。新しく作成したDLLと、Web.configファイルおよびWeb.Release.configファイルをWebサーバーにアップロードします。

エラーがあります。単純にビルドした場合、Web構成変換はローカル環境では機能しません。公開する必要があります。

デプロイメントプロセスは奇妙に思えます。DLL、Web.config、およびweb.Release.configのみをコピーしています。私には、コンパイルされたアプリケーションではなく、ソースコードをコピーしているように見えます。公開されたWebアプリケーションにはweb.release.configが含まれていません。

プロジェクトをローカルファイルシステムに公開し([WebApplication]-> [公開]を右クリック)、そこからファイルをコピーするか、選択した別の配置方法を使用する必要があります。

2年前、web.config変換に関する記事を書きました。VS 2010のステップバイステップのチュートリアルを提供します(公開ダイアログはVS 2012で変更されました): http: //www.tomot.de/en-us/article/5/asp.net/how-to-use -web.config-transforms-to-replace-appsettings-and-connectionstrings

于 2013-01-19T16:03:32.937 に答える
3

変換は、サイト/アプリを公開するときにのみ行われると思いました。アプリケーションのビルド時には行われません。後者は、ソース管理下で web.config を常に変更します (これは本当に面倒です)。

于 2014-08-14T06:47:57.177 に答える
1

web.config 変換中に上書きされないのが接続文字列のみである場合、これが私がしたことです。「Web の公開」ウィザードの「設定」セクションにある「実行時にこの接続文字列を使用する」チェックボックスをオフにしました。この設定は、接続文字列の web.config 変換を上書きしていました。

于 2015-05-04T19:20:06.873 に答える