2009-01-19 43 views
0

我继承了一个相当大的项目,它包含用VB6编写的应用程序以及用VB6,VB.NET 1.1和VB.NET 2编写的几个DLL和ActiveX控件。我希望更改其中一个在VB.NET 2中编写的其中一个在其application.dll.config文件中的DLL的设置之一,但它似乎没有任何作用。.NET 1.1和.NET 2配置文件一起工作

我的主VB6应用程序(我将称之为Alpha)有一个配置文件(Alpha.exe.cnfig),其中包含我的VB.NET 1.1 DLL(我将称之为Bravo)所使用的设置。在调用Bravo之后,Alpha调用Charlie(我的VB.NET 2 DLL)。但是,即使我更改了DLL所在的子目录中的Charlie.dll.config中的应用程序设置,它也没有任何作用。我试图把查理的设置放在阿尔法的配置文件中,但这会导致布拉沃因自动化错误而失败(我认为这是因为配置文件的格式从.NET 1.1和.NET 2改变而来)。

下面是一个简化的目录结构和文件位置例如:

\应用程序\阿尔法\ Alpha.exe(我的VB6应用程序)
\应用程序\阿尔法\ Alpha.exe.config(这个配置文件被用于(我的VB.NET 2动态链接库)
\ 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失败。

非常感谢您提供的任何帮助。

回答

0

这个问题似乎是因为Bravo.dll目标1.1,1.1版本的框架被加载,并且,正如你所说,applicationSettings部分在.NET 2.0中是新的。解决办法是强制VB exe加载2.0框架。在Alpha.exe.config文件中添加startup/supportedRuntime元素应该可以做到。您还需要一些comfiguration段声明,所以在最后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> 
+0

那是我的意思被下,在正下方,而不是内,遗憾的混乱。我试过你的建议,它会导致自动化错误,我猜测是因为.NET 1.1无法理解配置文件的.NET 2部分。 – AnturCynhyrfus 2009-01-19 13:01:32