10

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

4

3 回答 3

13

用户是否需要配置DLL?如果是这样,那么 DLL 应该使用 app.config 文件中的配置设置,而不是它自己的配置。app.config 文件应存储在与应用程序相同的目录中。如果没有,那么您可以采用几种不同的方式。您可以对 machine.config 文件进行更改,以便您的 Dll 可以在那里找到它们。我不会这样做。或者,您可以将配置存储在设置类中。这些可以通过配置覆盖,但您的默认值将通过属性在设置类的生成代码中设置,因此当需要默认值时,没有配置文件不会影响您的 Dll。

于 2008-11-22T13:30:00.967 回答
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;
于 2008-11-22T15:26:32.180 回答
1

您可以使用,AppDomain.CurrentDomain.BaseDirectory因为DLL库不会自行执行您只需要获取调用他的可执行文件目录

就像是:

var appDomain = AppDomain.CurrentDomain.BaseDirectory;
string sFileName = appDomain.Replace("\\bin\\Debug", "");
sFileName = sFileName + "Config\\config.xml";

在这里,我的可执行文件位于文件夹中bin\Debug,并且在文件夹内我有一个名为的文件夹 Config,其中我有 xml 配置文件config.xml。因此,sFileName将为您提供配置文件的相对路径\bin\Debug\Config\config.xml

于 2013-12-02T11:42:54.243 回答