我有一个 .NET dll 需要从其配置文件中读取其配置设置。通常,配置文件放置在 DLL 相同的目录下。但是如果 DLL 被 GAC 托管,该如何读取配置文件?因为我只能将 DLL 放入 GAC,而不能放置它的配置文件。
我有一个 .NET dll 需要从其配置文件中读取其配置设置。通常,配置文件放置在 DLL 相同的目录下。但是如果 DLL 被 GAC 托管,该如何读取配置文件?因为我只能将 DLL 放入 GAC,而不能放置它的配置文件。
用户需要配置 DLL 吗?如果是这样的话,DLL 应该使用从 app.config 文件中获取的配置设置,而不是它自己的配置。app.config 文件应该存储在与应用程序相同的目录中。如果不是这样的话,你可以选择多种方法。你可以更改 machine.config 文件,以便你的 DLL 可以在那里找到它们。我不会这么做。或者,你可以将配置存储在一个设置类中。这些可以通过配置进行覆盖,但是你的默认值将通过属性在设置类的生成代码中设置,因此缺少配置文件时,当只需要默认值时,你的 DLL 不会受到影响。
我同意tvanfosson的看法,Gac'ed dll将从应用程序路径中读取。 但是您也可以通过以下方式通知dll路径:
System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();
fileMap.ExeConfigFilename = "THE PATH TO THE CONFIG";
System.Configuration.Configuration cfg =
System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None);
string thevalue=cfg.AppSettings.Settings[variable].Value;
AppDomain.CurrentDomain.BaseDirectory
,因为DLL库本身不会执行,你只需要获取调用它的可执行文件目录即可。var appDomain = AppDomain.CurrentDomain.BaseDirectory;
string sFileName = appDomain.Replace("\\bin\\Debug", "");
sFileName = sFileName + "Config\\config.xml";
我的可执行文件在文件夹bin\Debug
中,文件夹内有一个名为Config
的文件夹,其中有一个名为config.xml
的xml配置文件。因此,sFileName
将为您提供相对路径到配置文件,如\bin\Debug\Config\config.xml