获取可执行程序集的名称






2.29/5 (5投票s)
使用 GetEntryAssembly 获取可执行文件的程序集名称 - 即使是从 DLL 中获取。
引言
这个小示例展示了如何获取可执行文件的程序集名称,即使是从该可执行文件调用的 DLL 中获取。
背景
我一直在寻找一种可靠的方法来获取原始启动可执行文件的程序集名称。我找到了许多使用 System.Environment.GetCommandLineArgs()[0]
的示例,但它返回可执行文件的*路径*,而不是项目属性中定义的*程序集名称*。
此外,我不需要完整的路径,只需要程序集名称,即使文件名已更改。当然,我可以使用 System.IO.Path.GetFileNameWithoutExtension(path)
来获取名称,但这不允许我表达我真正的强迫症个性 :). 如果在 IDE 中调用,你将得到 "ExeName.vshost"。
最后,我希望即使从可执行文件调用的 DLL 中获取,也能获取原始可执行程序集的名称。我最终如何满足我自己的强迫性需求并找到一个无需变通方法的解决方案?
使用代码
GetEntryAssembly()
方法返回第一个执行的可执行文件的程序集。我使用以下代码来获取原始可执行文件的程序集名称
C#
string name = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
Visual Basic .NET
Dim name as String = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
在 Visual Basic 中,我们可以使用 System.Windows.Forms.Application.ProductName
,但它不会返回程序集*名称* - 它返回程序集*产品名称*(略有区别 - 再次回到那个强迫症的问题 :))
如果你在 DLL 文件中使用这段代码,它仍然会返回调用 DLL 的可执行文件的程序集名称。我将此方法用于一个通用的日志记录类,该类从许多不同的项目中调用 - 我希望它生成的条目包含使用 DLL 的程序的程序集名称。即使 DLL 是由原始 EXE 调用的另一个 DLL 调用的,它也会返回原始程序集名称!(呼!该吃药了 :))
示例应用程序会产生这些消息框
来自这个可执行文件的程序集
尽情享用!