Home All Groups Group Topic Archive Search About

How to get assembly file info?

Author
7 Apr 2005 1:16 PM
Brett
Using Reflector,
URL:http://www.aisto.com/roeder/dotnet/Download.aspx?File=Reflector.zip, I
see in System.Reflection there is a class called AssemblyTitleAttribute.  It
has a read only property named Title.  I do the following to get my
application name.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
       Dim apptitle As System.Reflection.AssemblyTitleAttribute

        Me.Label1.Text = apptitle.Title.ToString
    End Sub

Error is:

An unhandled exception of type 'System.NullReferenceException' occurred in
MainForm.exe

Additional information: Object reference not set to an instance of an
object.


However, if I try to declare an instance:
    Dim apptitle As New System.Reflection.AssemblyTitleAttribute

I get this error under apptitle:
    Argument not specified for parameter 'title' of Public Sub New(Title As
String)

Can I use the above class to get the title?  There's a work around available
to getting assembly file info but it requires a lot of code.  I'd like to
understand what I have done wrong here though.

Thanks,
Brett

Author
7 Apr 2005 1:28 PM
Oenone
Brett wrote:

> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles MyBase.Load
>        Dim apptitle As System.Reflection.AssemblyTitleAttribute
>
>         Me.Label1.Text = apptitle.Title.ToString
>     End Sub

The problem here is that you declared an AssemblyTitleAttribute object, but
you haven't set it to anything, so you just have a pointer to Nothing.

>     Dim apptitle As New System.Reflection.AssemblyTitleAttribute

Here you're trying to create a brand new AssemblyTitleAttribute. That's not
going to help you, as it won't have your assembly's title stored within it.

Try this:

Imports System.Reflection
[...]

    Dim objTitle As AssemblyTitleAttribute
    objTitle = DirectCast( _
            AssemblyTitleAttribute.GetCustomAttribute( _
            Me.GetType.Assembly, GetType(AssemblyTitleAttribute)), _
            AssemblyTitleAttribute)
    Me.Label1.Text = objTitle.Title

This declares an AssemblyTitleAttribute object, as in your first piece of
code, which initially points to Nothing.

It then uses the shared GetCustomAttribute member of the
AssemblyTitleAttribute class to point the object at the
AssemblyTitleAttribute object that is built into your project. It uses
DirectCast to cast this from the generic Object to the specific object type
being used (AssemblyTitleAttribute).

Once this has been done you can just read the Title string from the object.

Hope that helps,

--

(O) e n o n e