0

我继承了一个相当大的项目,其中包括一个用 VB6 编写的应用程序和几个用 VB6、VB.NET 1.1 和 VB.NET 2 编写的 DLL 和 ActiveX 控件。我想更改一个用 VB 编写的 DLL 的设置之一.NET 2 在其 application.dll.config 文件中,但它似乎没有任何效果。

我的主要 VB6 应用程序(我将其称为 Alpha)有一个配置文件 (Alpha.exe.cnfig),其中包含我的 VB.NET 1.1 DLL(我将其称为 Bravo)使用的设置。调用 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。

我只想更改 app.config 而不是 machine.config 或 user.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/supportedRuntime在 Alpha.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 回答