【问题标题】:Connection String in app.config of a dlldll 的 app.config 中的连接字符串
【发布时间】:2015-09-16 07:20:46
【问题描述】:

我创建了一个 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 并从那里加载连接字符串?

【问题讨论】:

    标签: c# .net dll


    【解决方案1】:

    实际上,您的 dll(类库项目)中的 app.config 文件不会影响最终的宿主应用程序(使用 dll 的地方)。因此,您始终需要将正确的连接设置放在主机应用程序的配置文件中。例如,如果您在 winform 或 WPF 应用程序中使用程序集/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>
      

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

      【讨论】:

      • 感谢 Walker 详细阐述这个概念。
      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      相关资源
      最近更新 更多