4

ここで頭がおかしくなりました-ConfigurationManager.ConnectionStringsにAddメソッドがありますが、それを使用すると、「読み取り専用」エラーメッセージがスローされます。この問題に関する私の調査によると、実行時にプログラムで接続文字列を app.config に追加することはできません。これには、リフレクションを使用して ReadOnly フラグを false に設定する回避策があります。

リフレクションを使用した例を次に示します。

 public static void AddConnectionString(SqlConnectionStringBuilder connectionString,string Name)
    {
        try
        {
            typeof(ConfigurationElementCollection).GetField("bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(ConfigurationManager.ConnectionStrings, false);
            ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings(Name, connectionString.ConnectionString));
            EventLogger.LogEvent("Added ConnectionString",1);
            ProtectConnectionStrings();

        }
        catch (Exception ex)
        {
            EventLogger.LogError(ex.Message,(int)EventLogger.Events.GeneralException);
        }

    }

しかし、これは私には意味がありません。conStrs を app.config に保存して、暗号化できるようにします。ユーザーが実行時に app.config に追加できるようにする必要があります。これを達成する標準的な方法は何ですか?

4

1 に答える 1

1

app.config ファイルは、アプリケーションによって編集されることは想定されていません。これを判断する 1 つの方法は、それがどこにあるかを考えることです。つまり、(既定では) ユーザーまたはユーザーのアプリ (プログラム ファイル) が書き込みできないフォルダー内の実行可能ファイルの隣です。

ユーザーが変更しているものであれば、設定に保存する必要があります。

または、カスタム構成ファイルを作成し、同じ System.Configuration を使用してアクセスすることもできます。しかし、これは少し扱いに​​くく、通常の設定ファイルで何が得られるかわかりません。

于 2013-07-11T19:38:25.400 に答える