加载了错误的App.config

时间:2009-01-22 22:11:21

标签: c# .net .net-3.5 configuration c#-3.0

我有一个我构建的.NET 3.5类库,它读取App.config文件以获取所需的值。当我在Visual Studio中测试它时,它可以提取配置值。为了测试它,我只需将项目更改为控制台应用程序并执行方法调用。

我需要从许多其他.NET程序中调用这个类库,我希望类库能够自给自足(我应该可以从任何其他程序调用它,它应该使用自己的配置文件,不知道任何调用配置文件等)。

我可以添加对dll的引用(因为我还在开发我使用VS 2008,还没有向GAC抛出任何内容)但是类库正在读取的App.config来自调用程序的App .config,而不是类库的App.config。

类库dll将它的配置文件放在同一目录中,因此它应该能够很好地找到它,并且调用应用程序的名称也不同。我正在使用App.config中的标准键值对(例如配置文件名称myClassLibrary.dll.config)并使用以下代码行获取值:

String myVal = ConfigurationSettings.AppSettings["myConfigSetting"];

有谁知道如何解决这个问题?

4 个答案:

答案 0 :(得分:5)

C#中的应用程序域只能有一个程序集级别的app.config文件。 See here on MSDN。可执行文件将始终启动AppDomain,默认情况下会查找名称为EXECUTABLE_NAME.config的配置文件。例如,SampleApp01.exe将查找SampleApp01.exe.config作为其配置文件。

答案 1 :(得分:1)

您可以将您的配置放在framework文件夹内的machine.config文件中,这样您就可以在该计算机上运行的所有.Net应用程序中全局使用您的配置,

答案 2 :(得分:0)

我相信app.config将始终由可执行文件使用。把它放在那个目录里。

他们会这样做以确保可以共享dll而不必共享相同的.config文件。

您可以从可执行文件.config文件

创建链接
<appSettings configSource="\lib\app.config">

或者更改它的名称,我不明白你如何在同一个目录中同时拥有两个app.config文件。它们是否具有相同的名称?

<appSettings configSource="\lib.app.config">

答案 3 :(得分:0)

我无法找到一种方法来避免获取调用dll / exe等的app.config。我找到的唯一方法是使用硬编码路径并以这种方式加载它。这是我用来做的代码:

using System.Configuration;
...
public static KeyValueConfigurationCollection getAppSettingsFromAppConfig(String appConfigPath) {
    ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = appConfigPath;
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    AppSettingsSection section = config.AppSettings;
    KeyValueConfigurationCollection appsettings = section.Settings;
    return appsettings;
}

然后你有一个KeyValueConfigurationElement的集合,你可以使用.Value从配置文件中获取字符串。