从C#中引用的DLL执行程序集名称

Mic*_*ern 38 .net c#

从C#中引用的类库获取执行程序集的应用程序名称(即MyApplication.exe)的最佳方法是什么?

我需要打开应用程序的app.config来检索引用的DLL的一些appSettings变量.

Ray*_*yes 51

要获得问题标题的答案:

// Full-name, e.g. MyApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
string exeAssembly = Assembly.GetEntryAssembly().FullName;

// or just the "assembly name" part (e.g. "MyApplication")
string exeAssemblyName = Assembly.GetEntryAssembly().GetName().Name;
Run Code Online (Sandbox Code Playgroud)

正如@Ben所提到的,既然你提到想要获取配置信息,请使用ConfigurationManager该类.

  • 你真好,大约两年过去,你编辑你的答案,包括我的解决方案.你怎么这么久?:P (2认同)

Ben*_*man 18

如果您想获取当前appdomain的配置文件,那么您需要做的就是:

ConfigurationManager.AppSettings....

(当然这需要引用System.Configuration).

要回答你的问题,你可以像雷说(或使用Assembly.GetExecutingAssembly().FullName)那样做,但我认为问题更容易解决使用ConfigurationManager.

  • `Assembly.GetExecutingAssembly()`没有得到OP正在寻找的程序集.`Assembly.GetEntryAssembly()`的确如此 (17认同)

Jam*_*urt 9

如果您想要父 EXE 的名称而不是引用的 DLL 程序集的名称 - 您将需要使用:

Assembly.GetEntryAssembly().GetName().Name
Run Code Online (Sandbox Code Playgroud)

这将返回 EXE 名称(减去 .EXE 部分)。

根据OP的问题(第一段!),使用 GetExecutingAssembly() 是不正确的,因为它将返回 DLL 名称。


Aoi*_*asu 7

要获得没有版本等的确切名称,请使用:

string appName = Assembly.GetEntryAssembly().GetName().Name;
Run Code Online (Sandbox Code Playgroud)

适用于.NET v1.1及更高版本.

  • 仍然返回 A.exe,除非 A.exe 是非托管的,或者任何 dll 被加载到单独的 AppDomain 中。有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.reflection. assembly.getentry assembly(v=vs.110).aspx (2认同)

Jai*_*der 7

您可以通过类类型获取程序集...

typeof(MyClass).Assembly
Run Code Online (Sandbox Code Playgroud)


小智 5

您永远不应该将您的库与使用者(在本例中为 Web、WinForm 或 WCF 应用程序)耦合。如果您的库需要配置设置,则将其提供给库。

不要对库进行编码以从使用者的配置文件中提取该数据。为此提供重载的构造函数(这就是它们的用途)。

如果你曾经看过这个ConfigurationManager.AppSettings对象,它只是一个NameValueCollection. 因此,在您的库中创建一个构造函数以接受 aNameValueCollection并让您的使用者将该数据提供给库。

//Library
public class MyComponent
{
  //Constructor
  public MyComponent(NameValueCollection settings)
  {
     //do something with your settings now, like assign to a local collection
  }
}

//Consumer
class Program
{
  static void Main(string[] args)
  {
    MyComponent component = new MyComponent(ConfigurationManager.AppSettings);
  }
}
Run Code Online (Sandbox Code Playgroud)