【问题标题】:Calling Assembly to get Application Name调用程序集获取应用程序名称
【发布时间】:2009-01-22 17:16:38
【问题描述】:

我有一个引用实用程序程序集的控制台应用程序 (MyProgram.EXE)。

在我的实用程序程序集中,我有这样的代码:

Dim asm As Assembly = Assembly.GetExecutingAssembly()
Dim location As String = asm.Location
Dim appName As String = System.IO.Path.GetDirectoryName(location)
Conole.WriteLine("AppName is: {0}", appName)

当我从MyProgram.EXE 调用它时,我收到“AppName is: Utilities.dll

我想要的是“AppName is: MyProgram.EXE

我做错了什么?

【问题讨论】:

  • 哇,我的编辑中这些 br 是从哪里来的。

标签: .net vb.net system.reflection


【解决方案1】:

使用GetEntryAssembly() 来获取包含入口点的程序集。

更好的方法是改用System.Environment.CommandLine 属性。

具体来说:

Dim location As String = System.Environment.GetCommandLineArgs()(0)
Dim appName As String = System.IO.Path.GetFileName(location)
Conole.WriteLine("AppName is: {0}", appName)

顺便说一句,你想用GetFileName而不是GetDirectoryName

【讨论】:

  • 为什么System.Environment.CommandLineGetEntryAssembly() 好?
  • 因为 GetEntryAssembly() 可以返回 null。见:msdn.microsoft.com/en-us/library/…
  • also (per stackoverflow.com/questions/980202/…):“如果您在 IIS 下以调试模式运行 WCF 服务应用程序,GetEntryAssembly 方法也会返回 null。诚然,这种情况很少见,只有开发人员才能使用会遇到。- Gravitas 2010 年 11 月 10 日 10:39"
【解决方案2】:

由于您询问的是 VB.NET,您可以轻松从“我的”命名空间中提取此信息,如下所示:

My.Application.Info.AssemblyName

【讨论】:

  • 这也将获取引用的 DLL 的程序集,而不是调用(父)模块。
【解决方案3】:

我用:

CallingAppName = System.Reflection.Assembly.GetEntryAssembly.GetName().Name

【讨论】:

    【解决方案4】:

    就我而言,我无法访问 My.Application,可能是因为我在一个全局类中,所以我使用了:

    AppName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-24
      • 2011-05-15
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多