0

VB6 で記述されたアプリケーションと、VB6、VB.NET 1.1、および VB.NET 2 で記述されたいくつかの DLL および ActiveX コントロールで構成されるかなり大きなプロジェクトを継承しました。VB で記述された DLL の 1 つの設定を変更したいと考えています。 application.dll.config ファイルにある .NET 2 ですが、効果がないようです。

メインの VB6 アプリケーション (Alpha と呼びます) には、VB.NET 1.1 DLL (Bravo と呼びます) で使用される設定を含む構成ファイル (Alpha.exe.cnfig) があります。Bravo を呼び出した後、Alpha は Charlie (私の VB.NET 2 DLL) を呼び出します。ただし、DLL が存在するサブディレクトリの Charlie.dll.config でアプリケーション設定を変更しても、効果はありません。Charlie の設定を Alpha の構成ファイルに入れようとしましたが、これにより Bravo が自動化エラーで失敗します (構成ファイルの形式が .NET 1.1 および .NET 2 から変更されたためだと思います)。

以下は、簡略化されたディレクトリ構造とファイルの場所の例です。

\Application\Alpha\Alpha.exe (私の VB6 アプリケーション)
\Application\Alpha\Alpha.exe.config (この構成ファイルは Bravo.dll によって使用されます)
\Application\Assembly\Bravo.dll (私の VB.NET 1.1 DLL)
\Application\Controls\Charlie\Charlie.dll (私の VB.NET 2 DLL)
\Application\Controls\Charlie\Charlie.dll.config (このファイルは Charlie.dll によって無視されます)

デフォルト設定を変更して VB.NET 2 DLL を再コンパイルしました。設定自体にコード障害がないことを確認するためにこれを行いましたが、これは正常に動作します。ただし、構成ファイルを変更する方法をクライアントに通知できるようにして、別の設定が必要になるたびに DLL を再コンパイルすることなく、クライアントが必要なものに設定できるようにしたいと考えています。

machine.config や user.config ではなく、app.config のみを変更したい。

Alpha.exe.config の例を次に示します。

<configuration>
    <appSettings>
        <add key="MySetting" value="MyValue" />
    </appSettings>
</configuration>

そして、これが Charlie.dll.config の例です

<configuration>
    <applicationSettings>
        <Charlie.My.MySettings>
            <setting name="MySetting" serializeAs="String">
                <value>MyValue</value>
            </setting>
        </Charlie.My.MySettings>
    </applicationSettings>
</configuration>

applicationSettings セクションを入れてみるとAlpha.exe.config の appSettings セクションの直下 (つまり、構成要素の別の子要素) の場合、Bravo.dll は失敗します。

あなたが提供できる助けを前もって感謝します。

4

1 に答える 1

0

問題は、Bravo.dll が 1.1 をターゲットにしているため、フレームワークの 1.1 バージョンが読み込まれ、おっしゃる通り、applicationSettings セクションが .NET 2.0 で新しくなったことです。解決策は、VB exe に 2.0 フレームワークをロードさせることです。startup/supportedRuntimeAlpha.exe.config ファイルに要素を追加すると、うまくいくはずです。構成セクションの宣言も必要になるため、最終的に Alpha.exe.config は次のようになります。

<configuration>
    <startup>
        <supportedRuntime version="v2.0.50727" />
    </startup>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        <section name="Charlie.My.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </configSections>
    <appSettings>
        <add key="MySetting" value="MyValue" />
    </appSettings>
    <applicationSettings>
        <Charlie.My.MySettings>
            <setting name="MySetting" serializeAs="String">
                <value>MyValue</value>
            </setting>
        </Charlie.My.MySettings>
    </applicationSettings>
</configuration>
于 2009-01-19T12:53:13.833 に答える