Получить имя исполняемой сборки из ссылочной DLL в С#

Каков наилучший способ получить имя приложения (например, MyApplication.exe) исполняющей сборки из библиотеки классов ссылок в С#?

Мне нужно открыть приложение app.config для извлечения некоторых переменных appSettings для указанной DLL.

Ответ 1

Если вы хотите получить текущий файл конфигурации appdomain, тогда вам нужно всего лишь:

ConfigurationManager.AppSettings....

(для этого требуется ссылка на System.Configuration, конечно).

Чтобы ответить на ваш вопрос, вы можете сделать это, как сказал Рэй (или используйте Assembly.GetExecutingAssembly().FullName), но я думаю, что проблему проще решить с помощью ConfigurationManager.

Ответ 2

Чтобы получить ответ на заголовок вопроса:

// 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;

Как уже упоминалось @Ben, поскольку вы хотите получить информацию о конфигурации, используйте класс ConfigurationManager.

Ответ 3

Чтобы получить точное имя без версий и т.д., используйте:

string appName = Assembly.GetEntryAssembly().GetName().Name;

Работает с .NET v1.1 и более поздними версиями.

Ответ 4

Вы можете получить сборку через тип класса...

typeof(MyClass).Assembly

Ответ 5

Вы никогда не должны связывать свои библиотеки с потребителем (в данном случае Web, WinForm или WCF-приложение). Если вашей библиотеке нужны настройки конфигурации, затем отправьте ее в библиотеку.

Не копируйте библиотеку, чтобы извлекать эти данные из пользовательского конфигурационного файла. Предоставьте перегруженные конструкторы для этого (для чего они предназначены).

Если вы когда-либо смотрели на объект ConfigurationManager.AppSettings, это просто NameValueCollection. Поэтому создайте конструктор в своей библиотеке, чтобы принять 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);
  }
}

Ответ 6

Если вы хотите прочитать (и отобразить) номер версии:

  Assembly ass = System.Reflection.Assembly.GetExecutingAssembly();
  AssemblyName assname = ass.GetName();

  Version ver=assname.Version;

Где-то в приложении (т.е. блок заголовка в форме Windows)

 this.Text = "Your title    Version " + ver;

Ответ 7

Если вы хотите, чтобы имя родительского EXE, а не ссылка на DLL-сборку, вам нужно будет использовать это:

Assembly.GetEntryAssembly().GetName().Name

Это вернет имя EXE (минус часть .EXE).

Использование GetExecutingAssembly() неверно в соответствии с вопросом OP (первый абзац из этого!), поскольку он вернет имя DLL.

Ответ 8

Для краткого имени сборки из экземпляра класса:

Me.GetType ().Assembly.GetName().Name