1

ドメインオブジェクト(.net 4.0のlinqベースのオブジェクト)を含むクラスライブラリがあります。このライブラリに、独自の app.config に接続文字列を使用させたいと考えています。

いくつかの問題があります: Settings : ApplicationSettingsBaseで使用されるモデルに従って、 app.config から設定を読み取るラッパーを作成しました。

ただし、モデルとは異なり、デフォルト値を提供します。問題は、app.config からデータをロードする必要があるプロパティです。

  internal sealed class ApplicationSettings : ApplicationSettingsBase
    {
    // other properties

        [SpecialSetting( SpecialSetting.ConnectionString )]
       [global::System.Configuration.DefaultSettingValueAttribute("Server=.;Database=RFPLUSSTD;User Id=SYSADM;Password=SYSADM;")]
        public string MainConnectionString
    {
    get { return (string)this["MainConnectionString"]; }
    }

// その他のプロパティ }

in app.config:
<connectionStrings>
<add name="MainConnectionString"
connectionString="..."
providerName="System.Data.SqlClient" />
</connectionStrings>

今、これは機能しません... conn文字列の名前をnamespace.class.propertyのような完全修飾名に設定しようとしましたが、役に立ちました。

  • 設定をコンパイルするため、dbml で使用されるデフォルトの設定クラスを使用したくありません:D 再コンパイルせずにそれらを変更することはできません...
  • 私はすでに1.1のプロジェクトで別のモデルのアプリ設定クラスを使用していますが、3.5は十分に成長し、独自のオブジェクトを持っていると思いました..

では、なぜ機能しないのでしょうか。どうすれば機能させることができますか?

ありがとうございました

4

1 に答える 1

1

変更を行うには、ファイル システムにアクセス許可があることを確認する必要があります。あなたがそれを考慮したことを願っています。構成ファイルを変更したことが確実であり、デフォルト設定のみが表示される場合は、プロジェクト ルートにない出力 bin フォルダーから構成ファイルを読み込んでいる可能性があります。変更が失敗したことが確実な場合は、エラー メッセージを投稿してください。

更新しました:

こんにちはジャック、あなたのコードの主な問題は、毎回 ApplicationSettings クラスの新しいインスタンスを作成していることであり、設定がユーザースコープにある場合、null 値が発生し、毎回デフォルト値になることだと思います。

組み込みの Settings クラスを使用すると、簡単に実行できます。既定では、Settings は Assembly 内でのみアクセスでき、内部シールされた部分クラスの Settings ( Settings.Designer.cs内) にアクセスできます。これをパブリック シールに変更すると、任意のアセンブリから設定にアクセスできるようになります。次に、設定をユーザー スコープではなくアプリケーション スコープに保持する必要があります。この 2 つを実行したら、問題なく取得および保存できます。

于 2013-02-27T14:02:04.603 に答える