如何获取当前正在执行的DLL的位置?

我有一个配置文件,我需要加载作为执行我写一个DLL的一部分。

我遇到的问题是,当应用程序运行时,我放置dll和配置文件的位置不是“当前位置”。

例如,我把dll和xml文件放在这里:

D: Program Files Microsoft Team Foundation Server 2010 Application Tier Web Services bin Plugins

但是,如果我尝试引用xml文件(在我的dll中),像这样:

XDocument doc = XDocument.Load(@".AggregatorItems.xml")

那么。 AggregatorItems.xml转换为:

C: WINDOWS SYSTEM32 INETSRV AggregatorItems.xml

所以,我需要找到一种方式(我希望)知道当前正在执行的dll所在的位置。 基本上我正在寻找这个:

XDocument doc = XDocument.Load(CoolDLLClass.CurrentDirectory+@"AggregatorItems.xml")

您正在寻找System.Reflection.Assembly.GetExecutingAssembly()

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string xmlFileName = Path.Combine(assemblyFolder,"AggregatorItems.xml");

编辑:

显然Location属性在某些条件下不能正常工作(使用NUnit,TFS实例化的DLL,Outlook?测试) - 在这种情况下,您可以使用CodeBase属性。


正如已经指出的那样,反射是你的朋友。 但是你需要使用正确的方法;

Assembly.GetEntryAssembly()     //gives you the entrypoint assembly for the process.
Assembly.GetCallingAssembly()   // gives you the assembly from which the current method was called.
Assembly.GetExecutingAssembly() // gives you the assembly in which the currently executing code is defined
Assembly.GetAssembly( Type t )  // gives you the assembly in which the specified type is defined.

在我的情况下(处理我的程序集加载[作为文件]到Outlook中):

typeof(OneOfMyTypes).Assembly.CodeBase

注意,这里使用的CodeBase (不是Location上) Assembly 。 其他人已经指出了定位组件的其他方法。

链接地址: http://www.djcxy.com/p/44545.html

上一篇: How to get the location of the DLL currently executing?

下一篇: Plugin DLLs that depend on other DLLs