2015-06-29 123 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

感谢沃克阐述了这个概念。 –

相关问题