2012-01-25 23 views
1

非常に古いASP.NET 2.0 Webアプリケーションを継承しました。web.config with .dllのapp.config

このアプリケーションでは、クラスライブラリプロジェクトをサポートしています。 DataAccessクラスライブラリには、ConnString1という名前の接続文字列を持つapp.config(およびsetting.settingsファイル)があります。

私はいつも.DLLがapp.config/setting.settingsファイルを持つことができないと思っていました(少なくともそれらは含めることができますが使用されません)ので、これは私にとって紛らわしいものです。

web.configには、サーバーログイン資格情報は同じで、サーバー名は異なるConnString1という名前の接続文字列もあります。

Visual Studio DEBUGからアプリケーションを実行すると、app.config/settingsファイルにある接続文字列が使用され、web.config/machine.configで定義されたものは使用されません。

私は.DLLがこれをしないと思っていましたが、代わりにweb.configを使用しましたか?

しかし、RELEASEモードでこのアプリケーションをプロダクションサーバー(テストウェブサイト)にプッシュすると、web.configに正しい接続文字列が使用されているようです。

誰でもこれを説明できますか?

答えて

2

アプリケーション(エントリポイント)の設定ファイル(yourapp.exe.configまたはweb.config)とは対照的に、そのDLLの一部である設定ファイルが使用されていると思うのは混乱します。 )。おそらく、conn文字列はデバッグモードでの使用のためにどこかにハードコードされているかもしれません。 "#if DEBUG"プリプロセッサディレクティブを介して条件付きコンパイルを使用することによって(つまり、この問題が起きているかどうかを調べるためにソリューション全体で "#if DEBUG"を検索することができます)。

MSDN article about app settings

黄色は「設計時にアプリケーションの設定を作成する」セクションの「注記」を参照してください:「クラスライブラリには、構成ファイルのモデルが存在しないので、アプリケーションの設定は、クラスライブラリプロジェクトには適用されません」

1

すべての設定を実行可能な設定ファイルに指定する必要があります。ウィンドウやコンソールアプリケーションの場合はapp.config、Webプロジェクトの場合はweb.configです。

ライブラリで設定を指定することはできますが、アプリケーションがその設定を読むことができるようにするには、設定を実行可能ファイルの設定ファイルにコピーする必要があります。

2

私は問題を発見した:

上記の例では、私は、アプリケーションの接続文字列を設定するためにweb.configファイル/のma​​chine.configを使用しています。

接続文字列がweb.configで定義されていない場合は、デフォルトでmachine.configが使用されます。接続文字列がmachine.configに定義されていない場合、.dllにあるapp.config設定が使用されます。

接続文字列をmachine.configに配置することは、正しいFramework/CONFIGで定義する必要があることに注意することが重要です。

私の開発マシンでは、接続文字列はweb.configではなく環境内で定義されていました。しかし、Framework64/CONFIGでは、アプリケーションは32ビットでコンパイルされているため、Framework/CONFIGに接続文字列が定義されていないため、app.configにデフォルト設定されていますクラスライブラリ内の

私はそのことを説明したいと思いますか?

+1

嬉しいです。あなたの次のステップは、関係するさまざまな人々との会議を開催し、接続文字列がマシンまたは環境設定ファイルに属していないことを説明することです。 – NotMe

+1

これは本当だとは思わない。接続文字列をmachine.configに入れると、各ステップで設定を手作業で変更することなく、dev - > test - > productionからアプリ(およびその設定ファイル)を宣伝することができます。 – Jason

+0

正しい。私たちは20の異なるウェブサイトを持つ環境にいます。それらはすべて、列レベルの暗号化のために同じ接続文字列を使用します(データベースレベルで列を暗号化/復号化するために1回のログインのみが許可されます)。この接続文字列をmachine.configに入れる方が簡単です。これは、Web.configで四半期ごとに変更する必要があります(これは当社のセキュリティ標準で要求されています)。 – Sean

関連する問題