2009-01-22 66 views
3

我有一个.NET 3.5类库,它为它需要的值读取一个App.config文件。当我在Visual Studio中测试时,它可以很好地调整配置值。为了测试它,我只是将项目更改为控制台应用程序并执行方法调用。正在加载错误的App.config

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

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

类库dll在同一目录下有它的配置文件,所以它应该能够很好地找到它,并且调用应用程序的命名方式不同。我使用的是标准的键值对在App.config(如配置文件myClassLibrary.dll.config的名称),并获取值出与下面的代码行:

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

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

回答

0

我相信app.config将永远由可执行文件使用。只需将其放入该目录即可。

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

您也许能够从可执行config文件

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

创建一个链接或更改其名称,我不明白你怎么能有在同一个目录都的app.config文件..他们不是有同一个名字吗?

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

当构建程序集时,它们都不会被重命名为assemblyname.config吗? – 2009-01-22 22:32:49

+0

类库与调用应用程序是分开的,所以不需要。我可以查看配置文件,将其打开并验证所有设置是否正确。 – Mario 2009-01-22 22:37:28

4

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

1

您可以通过这种方式,你可以在全球使用您的配置在这台机器上运行的所有.Net应用程序把你的configs在框架文件夹内的machine.config文件,

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摆脱与配置文件中的字符串。