Karan
Karan

Reputation: 3338

Get executing assembly name using reflection

I am trying to pull the project name using the reflection, but during the substring method it give me "index out of bound error".

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

I don't understand why it is giving error on the third line.

Plz Help.

Upvotes: 6

Views: 9769

Answers (5)

Pilgerstorfer Franz
Pilgerstorfer Franz

Reputation: 8359

I would try accessing the AssemblyTitle Attribute in your AssemblyInfo file. Location of any assembly may not be the same as the project name. Try this:

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

hth

Upvotes: 0

Frederik Gheysels
Frederik Gheysels

Reputation: 56964

Have you debugged the code ? Are you sure that the 2nd line returns a value other than -1 ? When no backslash is found in the string, LastIndexOf will return -1, which is not a valid index that can be used by Substring and thus, an 'index out of bounds' error will be thrown.

A safer method would be to extract the filename using the methods that are defined in the Path class. But, be aware that the 'project name' is not necessarly the same as the assembly name.

Upvotes: 1

Henrik
Henrik

Reputation: 23324

Just remove the second parameter from the call to Substring. From the documentation:

// Exceptions:
//   System.ArgumentOutOfRangeException:
//     startIndex plus length indicates a position not within this instance.  -or-
//     startIndex or length is less than zero.

Upvotes: 1

escargot agile
escargot agile

Reputation: 22389

Use the Path class instead of trying to reinvent the wheel and calculating the substring indexes manually.

Upvotes: 1

Michel van Engelen
Michel van Engelen

Reputation: 2869

Try:

System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location)

Upvotes: 14

Related Questions