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

5
我创建了一个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个回答

12

实际上,您 dll(类库项目)中的 app.config 文件不会影响最终的宿主应用程序(其中使用了该 dll)。因此,您始终需要在宿主应用程序的配置文件中放置适当的连接设置。例如,如果您在 winform 或 WPF 应用程序中使用程序集/ dll,则应将相关配置(如连接字符串)放在 winform 或 WPF 应用程序的 app.config 文件中。如果程序集/ dll 用于 ASP.NET Web 应用程序,则我们应确保将相关设置放在 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>

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


感谢沃克详细阐述这个概念。 - Khalique Rehman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接