11

dll を動的にロードし (特定のディレクトリにあるものは何でも)、リフレクションによってそれらからワークフロー クラスを呼び出す「エンジン」があります。

データベースへのアクセスを必要とする新しいワークフローがいくつかあるので、dll ディレクトリに構成ファイルを配置することにしました。

しかし、何らかの理由で私のワークフローは構成ファイルを認識しません。

<configuration>
  <appSettings>
      <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" />
  </appSettings>
</configuration>

上記の構成ファイルを指定すると、次のコードは空の文字列を出力します。

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]);

私が望むのは、設定ファイル名を指定することだけだと思いますが、ここで問題が発生しています。結果が出ないだけ。誰にも指針がありますか?

4

6 に答える 6

7

AppSettingsを読み取るためのコードサンプルがDLLにある場合、DLLの構成ファイルではなく、アプリケーションの構成ファイルを読み取ろうとします。これは、Reflectionを使用してコードを実行しているためです。

于 2008-09-30T20:38:12.233 に答える
4

面白いことに、非常に似たようなことをしているところで、設定ファイルは問題なくロードされます。私たちの場合、新しい構成ファイルの名前はそれぞれ、関連するアセンブリの名前と一致すると思います。したがって、MyLibrary.dll には、そのファイル アセンブリの情報を含む MyLibrary.dll.config という名前のファイルがあります。また、私が手元にある例では、C# ではなく VB.Net を使用しており (それぞれいくつかあります)、そこにあるすべての設定は VB 固有の My.Settings 名前空間用であるため、ConfigurationManager クラスを直接使用しません。それらを読みます。

設定自体は次のようになります。

<applicationSettings>
    <MyLibrary.My.MySettings>
        <setting name="SomeSetting" serializeAs="String">
            <value>12345</value>
        </setting>
    </MyLibrary.My.MySettings>
</applicationSettings>
于 2008-09-30T20:29:47.493 に答える
1

私は同様のシステムのためにこれを書きました。私の記憶では、以前Assembly.GetExecutingAssemblyは DLL へのファイル パスを取得し、.configその名前に追加して、それを としてロードし、ノードXmlDocumentにナビゲートして、それをのメソッドに渡しました。<appSettings>NameValueSectionHandlerCreate

于 2008-09-30T23:11:14.690 に答える
1

ここに 1 つの方法があります - AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "構成ファイルへのパス");

コンストラクターで呼び出します。

于 2011-06-02T12:32:38.453 に答える
0

正しく思い出せば、app.configはアプリケーションディレクトリからロードされるため、他のディレクトリからdllをロードする場合は、アプリケーションの構成ファイルに必要なキーが必要になります。

于 2008-09-30T20:34:32.570 に答える
0

完全にはわかりませんが、クラスはデフォルトでAppDomainのentryメソッドのパス(ほとんどの場合、exeのパス)でのみ機能すると思います。別の構成ファイルを指すには、最初にOpenExeConfiguration(string exePath)(Framework 2.0以降)を呼び出す必要があります。

于 2008-09-30T20:42:20.227 に答える