dll的app.config中的连接字符串

时间:2015-06-29 17:49:10

标签: c# .net dll

我创建了一个C#dll,它使用 app.config 文件中的连接字符串连接到数据库。

我在Web应用程序(Visual Studio 2013,Windows 7)中使用它,它也连接到数据库并在 web.config 文件中有自己的连接字符串。 但是,当Web应用程序使用dll时,dll无法从 app.config 中找到所需的连接字符串。

我意识到dll正在 web.config 中寻找连接字符串。现在,我将连接字符串添加到 web.config ,它工作正常。

我的问题是:

这是正确的做法吗?或者,有一种方法可以让dll找到它的 app.config 并从那里加载连接字符串?

2 个答案:

答案 0 :(得分:9)

实际上你的dll(类库项目)中的app.config文件不会影响最终的主机应用程序(使用dll)。因此,您始终需要在主机应用程序的配置文件中放置正确的连接设置。例如,如果在winform或WPF应用程序中使用assembly / dll,则应将相关配置(如连接字符串)放在winform或WPF应用程序的app.config文件中。如果在ASP.NET Web应用程序中使用了assembly / dll,那么我们应该确保将相关设置放在Web应用程序的web.config文件中。

答案 1 :(得分: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>

然后,在您的Web应用程序中,您可以通过调用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中执行代码时将使用的值。在您的情况下,您只需要将连接字符串放入应用程序设置中,而不是将其包含在连接字符串部分中。