GAC中程序集的配置文件

10

我有一个 .NET dll 需要从其配置文件中读取其配置设置。通常,配置文件放置在 DLL 相同的目录下。但是如果 DLL 被 GAC 托管,该如何读取配置文件?因为我只能将 DLL 放入 GAC,而不能放置它的配置文件。

3个回答

13

用户需要配置 DLL 吗?如果是这样的话,DLL 应该使用从 app.config 文件中获取的配置设置,而不是它自己的配置。app.config 文件应该存储在与应用程序相同的目录中。如果不是这样的话,你可以选择多种方法。你可以更改 machine.config 文件,以便你的 DLL 可以在那里找到它们。我不会这么做。或者,你可以将配置存储在一个设置类中。这些可以通过配置进行覆盖,但是你的默认值将通过属性在设置类的生成代码中设置,因此缺少配置文件时,当只需要默认值时,你的 DLL 不会受到影响。


12

我同意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;

tvanfosson 的回答不错,但我认为这个答案更合适。 - Keith

1
你可以使用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


抱歉,这是我第一次在这里回复,代码格式不太好 :( - Vinod Srivastav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接