Re: how do you find the root namespace at runtime?

From: Jay B. Harlow [MVP - Outlook] (Jay_Harlow_MVP_at_msn.com)
Date: 11/04/04


Date: Thu, 4 Nov 2004 14:05:49 -0600

Bob,
> You mean something like this -
>
> Dim asm As [Assembly] = System.Reflection.Assembly.GetEntryAssembly
> MsgBox(asm.EntryPoint.DeclaringType.Namespace)
No I meant exactly what I showed! Of course the above doesn't require you to
know the startup class.

> But there is no guarantee that the assembly's startup object is not
> contained within a deeper namespace than the root.
Then don't use the startup object, use a different class that is not
qualified with a namespace. I offered the startup object as its one known
object to exist in your project.

> The shortest Namespace will probably be
> the root. Ugh, but again no guarantee...
Most of my projects have 2 or more namespaces for the root namespace, as the
root namespace tends to be: company.solution.project.

> I guess I'll have to call this good enough.
Bingo!

I have to ask: Does it really matter what the root namespace is? What do you
really need or want it for? (Do you really need it?)

As you found, there is no real guaranteed way of finding it. I offered the
GetType(SomeType).Namespace as it is "close enough" for most VB.NET
developers, of course it will fail in source files that include a Namespace
statement, the workaround of course is to put GetType(SomeType).Namespace in
SomeType, and do not explicitly put SomeType in a namespace.

Hope this helps
Jay

"Bob" <noone@nowhere.com> wrote in message
news:eTzEYdqwEHA.3492@TK2MSFTNGP11.phx.gbl...
> You mean something like this -
>
> Dim asm As [Assembly] = System.Reflection.Assembly.GetEntryAssembly
> MsgBox(asm.EntryPoint.DeclaringType.Namespace)
>
> But there is no guarantee that the assembly's startup object is not
> contained within a deeper namespace than the root.
>
> Um... hmmm. I guess this will work if I make sure to exclude any types
> from
> referenced assemblies (not shown). The shortest Namespace will probably be
> the root. Ugh, but again no guarantee...
>
> Dim asm As [Assembly] = '<some assembly>
> Dim Root As String
> For Each t As Type In asm.GetTypes
> If Root Is Nothing Then
> Root = t.GetType.Namespace
> Else
> If Root.Length > t.FullName.Length Then
> Root = t.FullName
> End If
> End If
> Next
> MsgBox(Root)
>
> I guess I'll have to call this good enough.
>
> Thanks,
> Bob
>
> "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_MVP@msn.com> wrote in message
> news:u9JJ22owEHA.2016@TK2MSFTNGP15.phx.gbl...
>> Bob,
>> Have you tried using my second example?
>>
>> For example to get the namespace of the main form class, you can use:
>>
>> Dim [namespace] As String = GetType(MainForm).Namespace
>>
>> MainForm is the name of your startup object (as set in Project
> Properties).
>>
>> Hope this helps
>> Jay
>>
>>
>>
>> "Bob" <noone@nowhere.com> wrote in message
>> news:uyU9blowEHA.1260@TK2MSFTNGP12.phx.gbl...
>> > "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_MVP@msn.com> wrote in
> message
>> > news:%23uUwepcwEHA.2624@TK2MSFTNGP11.phx.gbl...
>> >> Bob,
>> >> > how do you find the root namespace at runtime?
>> >> Root namespace of what?
>> >
>> > The project that created the currently executing assembly.
>> >
>> > In the property pages of a project, available by right-clicking one one
>> > and
>> > selecting 'properties', under 'common properties'/'general' there is a
>> > place
>> > you can enter a 'Root Namespace'. I would like access to this at
> runtime.
>> >
>> > Bob
>> >
>> >
>>
>>
>
>



Relevant Pages


Quantcast