我有一个我构建的.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"];
有谁知道如何解决这个问题?
答案 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
从配置文件中获取字符串。