从C#中引用的DLL执行程序集名称
从C#中引用的类库中获取正在执行的程序集的应用程序名称(即MyApplication.exe)的最佳方法是什么?
我需要打开应用程序的app.config来检索引用的DLL的一些appSettingsvariables。
如果你想获得当前appdomain的configuration文件,那么你所需要做的就是:
ConfigurationManager.AppSettings
….
(这当然需要参考System.Configuration)。
要回答你的问题,你可以这样做,因为雷说(或使用Assembly.GetExecutingAssembly().FullName
),但我认为这个问题更容易使用ConfigurationManager
解决。
要获得问题标题的答案:
// Full-name, eg MyApplication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null string exeAssembly = Assembly.GetEntryAssembly().FullName; // or just the "assembly name" part (eg "MyApplication") string exeAssemblyName = Assembly.GetEntryAssembly().GetName().Name;
正如@Ben所提到的,由于您提到想要获取configuration信息,请使用ConfigurationManager
类。
要获得没有版本的确切名称,请使用:
string appName = Assembly.GetEntryAssembly().GetName().Name;
适用于.NET v1.1及更高版本。
您可以通过class级types获得该程序集…
typeof(MyClass).Assembly
你永远不应该把你的库与消费者(在这种情况下,Web,WinForm或WCF应用程序)。 如果你的图书馆需要configuration设置,然后把它放到图书馆。
不要编码库来从消费者的configuration文件中提取数据。 为此提供重载构造函数(就是这样)。
如果你曾经看过ConfigurationManager.AppSettings
对象,它只是一个NameValueCollection
。 因此,在你的库中创build一个构造函数来接受一个NameValueCollection
并让你的消费者将这些数据提供给库。
//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); } }
如果你想阅读(并显示)版本号:
Assembly ass = System.Reflection.Assembly.GetExecutingAssembly(); AssemblyName assname = ass.GetName(); Version ver=assname.Version;
某处在应用程序(即在Windows窗体中的标题块)
this.Text = "Your title Version " + ver;
如果你想要父EXE的名称而不是引用的DLL程序集 – 你将需要使用这个:
Assembly.GetEntryAssembly().GetName().Name
这将返回EXE名称(减去.EXE部分)。
使用GetExecutingAssembly()是不正确的,因为它将返回DLL的名称,OP的问题(它的第一段!)。
对于类实例中程序集的短名称:
Me.GetType ().Assembly.GetName().Name