10

app.config を使用してデータベース接続文字列を格納する ac# アセンブリがあります。アプリケーションをデバッグしているときに、ConfigurationManager が machine.config 接続文字列を返し続けたため、データベースへの接続が失敗し続けていることに気付きました。

データソース=.\SQLEXPRESS; 統合セキュリティ;....

<clear/app.config の接続文字列の前に >を追加すると、開発マシンの問題が修正されました。本番環境にデプロイしたときに問題が再発しました。machine.config 接続文字列の使用を停止する方法を誰か教えてもらえますか?

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString);

<connectionStrings>
    <clear/>
    <add name="VersionConnectionString"
     connectionString=" Data Source=localhost;Initial Catalog=VersionInfo;User ID=user;Password=password"         
     providerName="System.Data.SqlClient" />
  </connectionStrings>

アップデート

以下でも machine.config 接続文字列が表示されますか?!

 Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
                string dllConfigData =
                    appConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString;
4

4 に答える 4

6

DLL で接続文字列を使用する場合は、設定にまったく同じ名前を使用して、それらを exe の app.config にも追加する必要があります。次に、exe の .config ファイルで接続文字列を変更すると、DLL がロード時に自動的に選択されます。

これはおそらく、DB 永続化レイヤーが別の DLL に実装されている場合に、app.config ファイルでカスタム接続文字列を機能させる唯一の方法です。これを調査してデバッグするのにどれくらいの時間がかかったのか、私に尋ねないでください。

于 2010-09-23T20:24:09.193 に答える
3

これは古い質問であることは知っていますが、今日も同じ問題を抱えていました。問題はapp.config、プロジェクトに追加した が出力ディレクトリにコピーされていなかったことです。これを修正するには、 を右クリックしてapp.configを選択しますProperties。に変更Build ActionContentます。お役に立てれば!

于 2011-05-26T13:06:23.103 に答える
1

app.configファイルのインスタンスを構成オブジェクトとして取得してみてください。

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

var myConnString = config.ConnectionStrings["VersionConnectionString"].ConnectionString;

これにより、マシン構成ファイルが完全にバイパスされます。

于 2010-09-23T19:48:59.323 に答える
0

INDEX ではなく NAME で接続文字列を取得する必要があります。これにより、求めているものが確実に取得されます。

試す

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["VersionConnectionString"].ConnectionString);
于 2010-09-23T19:51:34.510 に答える