请建议哪个是最好的执行装配位置。
Assembly.GetAssembly(typeof(NUnitTestProject.RGUnitTests)).Location
或
Assembly.GetExecutingAssembly().Location
请建议哪个更好。我也可以使用GetEntryAssembly()
吗?
答案 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
。