我在一个解决方案中有一个控制台应用程序项目和库项目(dll)。库项目有app.config文件,我将连接字符串存储到数据库。 控制台应用程序引用此dll。
当我编译控制台应用程序并使用库部署它时,当我需要在部署应用程序后更改连接字符串时,我无法访问属于dll的app.config文件。
这是我看到的文件,但不是.config文件:
我哪里出错了?
答案 0 :(得分:9)
默认情况下,正在运行的应用程序只有1个“.config”文件。它是与启动程序的EXE关联的“.config”文件。您应该将DLL的配置文件中的配置值复制到控制台应用程序的配置文件中。如果您确实希望将它们分开,则不能使用默认的ConfigurationSettings.AppSettings字典。有关详细信息,请参阅this question。
答案 1 :(得分: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的another example。
答案 2 :(得分:1)
您是否为 exe 创建了app.config
文件(不仅仅是为了您的dll)? 您必须,并确保将dll配置中的任何设置复制到您的exe配置中。
答案 3 :(得分:-2)
检查配置文件的“复制到输出目录”属性。