繁体   English   中英

获取引用方法的程序集位置

[英]Get Assembly Location of Referenced Method

我有一个主要应用程序引用的DLL。 当我从DLL调用方法时,我需要从特定于DLL的app.config文件中读取配置。 但是,当我将Configuration Manager映射到所需的配置文件时,我注意到GetExecutingAssembly()返回主应用程序的程序集,而不是引用的DLL。 使用DLL时,有没有一种方法可以获取确切的DLL程序集位置? 当然,我想更新我的DLL,以便它在执行时始终返回其自己的assebmlylocation。

ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = Assembly.GetExecutingAssembly().Location);
Configuration libConfig = ConfigurationManager.OpenMappedExeConfiguration(
       map, ConfigurationUserLevel.None);

您需要使用反射来获取它。 有一种GetAssembly方法,它返回包含传递类型的程序集。

例:

string s = Assembly.GetAssembly(typeof(MemoryStream)).CodeBase;

返回mscorlib.dll的路径:

“文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll”

为什么您的程序集需要一个配置文件? 通常,您要做的是配置应用程序 ,而不是 因此,程序A的用户可以具有这些设置,而程序B的用户可以具有这些设置,但是两个程序都可以使用相同的引用程序集。

无论如何,如果确实需要执行此操作,则可以使用MethodBase.GetCurrentMethod()获取当前正在引用的程序集的位置:

string assemblyPath = MethodBase.GetCurrentMethod().DeclaringType.Assembly.Location;
Configuration libConfig = ConfigurationManager.OpenExeConfiguration(
   assemblyPath);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM