我有一个应用程序,需要以dll的形式加载一个加载项。 dll需要从配置(app.config)文件中获取其配置信息。我想动态找出app.config文件的名称,据我所知,这样做的方法是AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
但是,由于它是在父应用程序中托管的,因此从上面的代码中获取的配置文件是(parentapplication).exe.config。我无法在父应用程序中加载另一个appdomain,但我想更改appdomain的配置文件详细信息。我该怎么做才能得到dll的配置文件?
答案 0 :(得分:3)
好的,最后,我设法破解了一些对我有用的东西。也许这会有所帮助;
使用Assembly.GetExecutingAssembly,从我想要读取的配置文件的DLL中,我可以使用.CodeBase在我为它启动新的AppDomain之前找到DLL的位置。 * .dll .config位于同一文件夹中。
然后必须转换URI(如.CodeBase看起来像“file://path/assembly.dll”)来获取ConfigurationManager的LocalPath(它不喜欢Uri格式的字符串)。
try
{
string assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
string originalAssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
Uri uri = new Uri(String.Format("{0}\\{1}.dll", originalAssemblyPath, assemblyName));
string dllPath = uri.LocalPath;
configuration = ConfigurationManager.OpenExeConfiguration(dllPath);
}
catch { }