.NET库项目中的app.config文件

4

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

控制台应用程序引用了这个dll。

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

这些是我看到的文件,但没有.config文件:

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

我做错了什么?

4个回答

8

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


谢谢你的回答。我将dll中的app.config内容复制到了主机上,仍然能够通过applicationSettings控制dll在主机上的行为。(感谢其他人对我的问题进行了回应并提供了解决方案。) - psabela

2

默认情况下,每个进程都将使用自己的配置文件。如果你想让控制台应用程序拥有一个配置文件,你需要将其添加到你的项目中。在将App.config添加到你的项目后,每当构建你的项目时,App.config将被复制到输出文件夹中,并且会重命名为<application>.exe.config,其中<application>是你的应用程序名称(例如: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打开它。这里是另一个示例,演示如何使用OpenMappedExeConfiguration。


1
你是否为你的exe(而不仅仅是dll)创建了一个app.config文件?你必须这样做,并确保将dll配置中的任何设置复制到exe配置中。
或者你可以使用"添加链接"将app.config链接到你的exe。

-2
请在您的配置文件中检查“复制到输出目录”属性。

“Build Action”属性也可能有所帮助。 - jonaspp
DLLs没有单独的app.config文件。请参考David的回答。 - jonsb

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