1

複数のプロジェクトを含むソリューションがあります。各プロジェクトで、ローカル設定に影響する設定を含む .config ファイルを追加しました。

データベース接続の設定を読み取ろうとしたときに、どこから来たのかわからない値がいくつかありました。

これは、DatabaseLayer ソリューションの .config ファイルです。

<configuration>
<configSections>
</configSections>
<connectionStrings>
    <add name="localDBConnection"
        connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Niko\Documents\Visual Studio 2008\Projects\GaitLinkServer\DatabaseLayer\GaitLinkDB.mdf;Integrated Security=True;User Instance=True"
        providerName="System.Data.SqlClient" />
</connectionStrings>

行を実行したとき

private string connectionString = ConfigurationManager.ConnectionStrings["localDBConnection"].ToString();

null 参照オブジェクトの例外があります。そこで、次のコマンドを実行しようとしました。

ConfigurationManager.ConnectionStrings[0]

そして戻ってきた

{data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true}
base {System.Configuration.ConfigurationElement}: {data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true}
ConnectionString: "data source=.\\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
Name: "LocalSqlServer"
ProviderName: "System.Data.SqlClient"

どこから来たのかわからない。

複数のプロジェクトを持つソリューションのグローバル .config ファイルを作成する方法と、ローカル (プロジェクト) .config ファイルをリンクする方法を誰かが示してくれれば、本当に感謝しています。

ありがとう!

4

4 に答える 4

1

特定の AppDomain (実際にはプロセスではありません) は、常に単一のファイルから構成データを読み取ります。デフォルトでは、デスクトップ アプリケーションの場合はapplicationname .EXE.CONFIG、asp.net アプリケーションの場合は web.config です。.DLL.CONFIG は使用されません。そのようなファイルから実際の構成ファイルに設定をコピーする必要があります。

于 2009-03-24T02:41:17.997 に答える
1

注として、ApplicationSettings を使用する場合、プロパティは、その特定のプロジェクトの一部であった App.Config ファイルからデフォルトを取得します。実行中のアプリケーションでアプリケーション設定を指定すると、デフォルトが上書きされます。

説明する..

CatalogData というプロジェクトがあります。[プロジェクト プロパティ] 画面の [設定] タブを使用して、値が test の test というプロパティを追加しました。

アプリケーション構成ファイルには、

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

...

<configSections>
    <sectionGroup name="userSettings" 
     type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
    >
        <section name="CatalogModel.Properties.Settings"
         type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
         allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
</configSections>

<userSettings>
    <CatalogModel.Properties.Settings>
        <setting name="test" serializeAs="String">
            <value>test</value>
        </setting>
    </CatalogModel.Properties.Settings>
</userSettings>

...

</configuration>

設定を読み取るために生成されたコード (VB.NET の場合は My.Settings.test を介して、または C# では次のように使用できるようにします)

CatalogModel.Properties.Settings s = new CatalogModel.Properties.Settings();
string test = s.test;

生成されたコードでデフォルトに設定されます。これにより、コンパイルされた設定に問題がない限り、app.config ファイルはデプロイに実質的に不要になります。

このスニペットでは、コンパイルされたデフォルトを与える属性を確認できます。

...
    [global::System.Configuration.DefaultSettingValueAttribute("test")]

    public string test {
        get {
            return ((string)(this["test"]));
        }
    }
于 2009-03-24T03:15:38.600 に答える
0

これまでの回答で言及されていないことの 1 つは、ASP.NET または WinForms アプリで実行されているアセンブリは、ConfigurationManager を介してアプリケーションの web.config/app.config を認識することです。したがって、示唆されているように、構成情報をアプリの構成ファイルに入れると、アプリで使用されるアセンブリはそれらの値を読み取ることができます。あなたがしなければならない唯一のこと(そして良い習慣として文書化すること)は、.DLLが期待する名前付き要素がアプリ/ウェブ構成にあることを確認することです。

たとえば、.DLL をホストするアプリケーションが "MyAppConn" という名前のエントリを持つことを期待する WinForms アプリに .DLL があります。DLL のコードは次を使用します。

Dim cs as String = ConfigurtionManager.ConnectionStrings("MyAppConn").ToString

DLL はさまざまなホスティング アプリケーションで使用でき、MyAppConn がホスティング アプリの .config ファイルで定義されている限り、DLL は接続文字列を取得します。MyAppConn は、必要に応じて、各ホスティング アプリの異なるデータベースを指すことができます。

于 2009-03-24T03:30:13.387 に答える
0

すべての構成設定は、実行可能なプロジェクト (コンソール アプリ、Web サイトなど) の app.config (または web.config) に入れる必要があります。

ライブラリ (DLL) プロジェクトの app.config に構成設定を入れると、それらは見つかりません。すべての設定を実行可能ファイルの .config にコピーする必要があります。または、DLL プロジェクトの app.configs のビルド アクションを台無しにしてから、実行可能な app.config からそれらを参照してみてください。通常は、すべての設定を 1 か所にまとめておくのが最も簡単です。

于 2009-03-24T02:42:43.143 に答える