哪个更适合获取程序集位置,GetAssembly()。Location或GetExecutingAssembly()。位置

时间:2014-11-21 10:59:16

标签: c# .net-assembly

请建议哪个是最好的执行装配位置。

Assembly.GetAssembly(typeof(NUnitTestProject.RGUnitTests)).Location

Assembly.GetExecutingAssembly().Location 

请建议哪个更好。我也可以使用GetEntryAssembly()吗?

2 个答案:

答案 0 :(得分:31)

这取决于你想要什么.. Assembly.GetAssembly返回声明type的程序集。 Assembly.GetExecutingAssembly返回正在执行current code的程序集。 并Assembly.GetEntryAssembly返回process executable,请记住,这可能不是您的可执行文件。例如:

假设您的代码位于myexecutable.exe,您就拥有了这种情况。

trdparty.exe - >使用Assembly.LoadFile加载可执行文件并通过反射运行一些代码

myexecutable.exe - >使用类型MyClass

trdparty.exe修补了您的代码,以使用位于MyClass

中的新版Patch.dll

所以现在..如果你自己运行你的应用程序,你会得到这个结果

Assembly.GetAssembly(typeof(MyClass)) -> myexecutable.exe
Assembly.GetExecutingAssembly() -> myexecutable.exe
Assembly.GetEntryAssembly() -> myexecutable.exe

但如果你有上一个场景,你会得到

Assembly.GetAssembly(typeof(MyClass)) -> Patch.dll
Assembly.GetExecutingAssembly() -> myexecutable.exe
Assembly.GetEntryAssembly() -> trdparty.exe

作为回应,您应该使用提供您想要的结果的回复。 答案似乎很明显,它是Assembly.GetExecutingAssembly()但有时不是..想象你正在尝试加载与可执行文件关联的application.config文件..那么路径很可能应该是{{1总是得到“过程”的路径

正如我所说,取决于场景..和目的......

答案 1 :(得分:1)

似乎很明显:当您想要执行程序集时,请使用GetExecutingAssembly

有时您没有一个,例如作为Office加载项运行时。您可以改为使用Assembly.GetAssembly