2009-01-19 86 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