// 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;
//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);
}
}
8 回答
如果要读取(并显示)版本号:
应用程序中的某个位置(即Windows窗体中的 Headers 块)
如果您想要父EXE的名称而不是引用的DLL程序集 - 您将需要使用:
这将返回EXE名称(减去.EXE部分) .
根据OP的问题(它的第一段!)使用GetExecutingAssembly()是不正确的,因为它将返回DLL名称 .
对于类实例中程序集的简称:
如果您想获取当前appdomain的配置文件,那么您需要做的就是:
ConfigurationManager.AppSettings
....(当然这需要引用System.Configuration) .
要回答你的问题,你可以像雷说的那样(或使用
Assembly.GetExecutingAssembly().FullName
),但我认为使用ConfigurationManager
可以更容易地解决问题 .要获得问题 Headers 的答案:
正如@Ben所提到的,既然你提到想要获取配置信息,请使用
ConfigurationManager
类 .要获得没有版本等的确切名称,请使用:
适用于.NET v1.1及更高版本 .
您可以通过类类型获取程序集...
您永远不应该将您的库耦合到使用者(在本例中为Web,WinForm或WCF应用程序) . 如果您的库需要配置设置,请将其提供给库 .
不要对库进行编码以从消费者的配置文件中提取数据 . 为此提供重载的构造函数(这就是它们的用途) .
如果你曾经看过
ConfigurationManager.AppSettings
对象,它只是一个NameValueCollection
. 因此,在库中创建一个构造函数以接受NameValueCollection
并让您的消费者将该数据提供给库 .