【问题标题】:.Net app.config in library project.Net app.config 在库项目中
【发布时间】:2010-12-17 02:35:46
【问题描述】:

我在一个解决方案中有一个控制台应用程序项目和库项目 (dll)。库项目有 app.config 文件,我将连接字符串存储到数据库。 控制台应用程序引用此 dll。

当我编译控制台应用程序并使用库部署它时,当我需要在部署应用程序后更改连接字符串时,我无法访问属于 dll 的 app.config 文件。

这是我看到的文件,但不是 .config 文件:

  • library.dll
  • 库.pdb
  • console.application
  • console.exe
  • console.exe.manifest
  • console.pdb
  • console.vshost.application
  • console.vshest.exe

我哪里做错了?

【问题讨论】:

    标签: .net configuration


    【解决方案1】:

    默认情况下,一个正在运行的应用程序只有 1 个“.config”文件。它是与启动程序的 EXE 关联的“.config”文件。您可能应该将 DLL 配置文件中的配置值复制到控制台应用程序的配置文件中。如果您真的想将它们分开,那么您不能使用默认的 ConfigurationSettings.AppSettings 字典。请参阅this question 了解更多信息。

    【讨论】:

    • 感谢您的回答。我将 app.config 的内容从 dll 复制到主机,我仍然能够通过 applicationSettings 从主机 app.config 控制 dll 的行为。 (感谢其他回复我的询问并提供解决方案的人。)
    【解决方案2】:

    默认情况下,每个进程都会使用自己的配置文件。如果您希望控制台应用程序具有配置文件,则需要将其添加到您的项目中。在构建项目时将 App.config 添加到项目后,App.config 将作为 .exe.config 复制到输出文件夹,其中 是您的应用程序名称(例如 ConsoleApplication1.exe.config)。 (Web.config 更复杂。)

    通常,配置会添加到此应用程序配置文件中。

    因此,配置库程序集的最简单方法是将其特定配置添加到托管应用程序的配置文件中。

    现在这可能有点难看。使其不那么难看的一种方法是让应用程序配置文件简单地使用 ConfigSource 属性引用您的配置文件。这样,您可以将程序集与配置文件一起部署,并且只需让托管应用程序在其配置文件中添加几行以引用您的配置。首先,他们必须添加对 configSections 的引用:

      <configSections>
        <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </configSections>
    

    接下来,他们需要添加对您的配置文件的引用:

    <loggingConfiguration configSource="MyLoggingConfig.xml"/>
    

    现在,也许您不希望您的程序集的用户甚至知道有一个配置文件。如果是这种情况,您可以创建自己的独立配置文件并使用ConfigurationManager.OpenMappedExeConfiguration 打开它。这里是another example关于如何使用 OpenMappedExeConfiguration。

    【讨论】:

      【解决方案3】:

      您是否为您的 exe 创建了一个app.config 文件(不仅仅是为您的 dll)? 您必须,并确保将 dll 配置中的任何设置复制到 exe 配置中。

      或者你可以使用"Add as Link" to link the app.config to your exe

      【讨论】:

        【解决方案4】:

        检查配置文件的“复制到输出目录”属性。

        【讨论】:

        • “构建操作”属性也可能有帮助。
        • DLL 没有单独的 app.config 文件。见大卫的回答。
        猜你喜欢
        • 1970-01-01
        • 2011-05-26
        • 2010-12-11
        • 2018-05-24
        • 2020-03-20
        • 1970-01-01
        • 2011-06-12
        • 2012-04-09
        • 1970-01-01
        相关资源
        最近更新 更多