2015-06-29 119 views
1

我創建了一個C#dll,它使用連接字符串app.config文件連接到數據庫。dll的app.config中的連接字符串

我在也連接到數據庫的web應用程序(Visual Studio 2013,Windows 7)中使用它,並在web.config文件中有自己的連接字符串。 但是,當Web應用程序使用dll時,該DLL無法找到它需要的連接字符串app.config

我意識到DLL正在尋找連接字符串web.config。現在,我添加了連接字符串web.config,它工作正常。

我的問題是:

是不是這樣做的正確方法是什麼?或者,有一種方法可以讓dll找到它的app.config並從那裏加載連接字符串?

回答

8

其實你的dll(類庫項目)中的app.config文件不會影響最終的主機應用程序(使用dll)。所以你總是需要把正確的連接設置放在主機應用程序的配置文件中。例如,如果您在winform或WPF應用程序中使用assembly/dll,則應該將相關配置(如連接字符串)放在winform或WPF應用程序的app.config文件中。如果在ASP.NET Web應用程序中使用了assembly/dll,那麼我們應該確保將相關設置放入Web應用程序的web.config文件中。

2

在引用的DLL的app.config文件中硬編碼數據庫連接可能不是最好的方法。在web.config文件(或機器範圍設置的machine.config)中設置數據庫連接字符串將允許DLL的其他使用者使用不同的連接字符串。例如,如果您有不同的開發,質量保證或用戶接受環境,並且每個部署的Web應用程序都需要不同的數據庫,則這會很有用。

但是,如果這種方法不適合您的需求,使用應用程序設置您可以使用和/或覆蓋其他引用的DLL的默認值。舉例來說,如果你有一個名爲Foo和內組件,您使用了設置屬性,你有你的Foo的app.config文件的一節,有這樣的事情:

<applicationSettings> 
    <Foo.Properties.Settings> 
    <setting name="MyProperty" serializeAs="String"> 
     <value>MyValue</value> 
    </setting> 
    </Foo.Properties.Settings> 
</applicationSettings> 

然後,你的網內應用程序,您可以通過調用Foo.Properties.Settings.MyProperty來使用此屬性。這種方法也可以讓你設置Foo程序集可以使用的值。在你的web.config文件,你會包括部分...

<configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
      <section name="Foo.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
</configSections> 

...然後添加Foo.Properties.Settings部分,你想要的Foo.DLL使用時的值更新它它被包含在您的Web應用程序中。

這種方法將允許您設置應用程序在引用的DLL中執行代碼時使用的值。在你的情況下,你只需要將連接字符串放入應用程序設置中,而不是將其包含在連接字符串部分中。

+0

感謝沃克闡述了這個概念。 –

相關問題