Получить имя исполняемой сборки, используя отражение - PullRequest
6 голосов
/ 31 января 2011

Я пытаюсь получить имя проекта, используя отражение, но во время метода подстроки это дает мне «индекс из связанной ошибки».

string s = System.Reflection.Assembly.GetExecutingAssembly().Location;           
int idx = s.LastIndexOf(@"\");
s = s.Substring(idx, s.Length);

Я не понимаю, почему он выдает ошибку в третьей строке.

Plz Help.

Ответы [ 5 ]

14 голосов
/ 31 января 2011

Попробуйте:

System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location)
1 голос
/ 31 января 2011

Просто удалите второй параметр из вызова Substring. Из документации:

// Exceptions:
//   System.ArgumentOutOfRangeException:
//     startIndex plus length indicates a position not within this instance.  -or-
//     startIndex or length is less than zero.
1 голос
/ 31 января 2011

Используйте класс Path вместо попытки изобретать колесо и вычисления индексов подстроки вручную.

1 голос
/ 31 января 2011

Вы отладили код?Вы уверены, что вторая строка возвращает значение, отличное от -1?Если обратная косая черта в строке не обнаружена, LastIndexOf вернет -1, что является недопустимым индексом, который может использоваться Substring, и, таким образом, будет выдана ошибка «индекс вне границ».

Более безопасный метод - извлечь имя файла, используя методы, определенные в классе Path.Но имейте в виду, что «имя проекта» не обязательно совпадает с именем сборки.

0 голосов
/ 31 января 2011

Я бы попытался получить доступ к атрибуту AssemblyTitle в вашем файле AssemblyInfo.Расположение любой сборки может не совпадать с именем проекта.Попробуйте это:

Assembly a = Assembly.GetEntryAssembly();
AssemblyTitleAttribute titleAttr = (AssemblyTitleAttribute)  a.GetCustomAttributes(typeof(AssemblyTitlenAttribute), false)[0];
Console.WriteLine("Title: " + titleAttr.Title);

hth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...