How to get the assembly name and class name with full namespace of a given class in the solution?

23,624

Solution 1

You could use the Visual Studio Immediate Window as a quick way to obtain the assembly qualified name for one of the solution projects.

IIRC, these steps should work:

  1. Open the file of a class contained in the project for which you want to obtain assembly name;
  2. Set that project as the startup project for the solution;
  3. Open the Immediate Window, default C# environment shortcut is CTRL+D+I;
  4. In the Immediate Window type typeof(ClassNameOfStep1).AssemblyQualifiedName and press Enter.

The Immediate Window depends on Design-Time Expression Evaluation which in turns depends of Visual Studio Hosting Process so you need to have it enabled, which by default already is.

Also, I did some quick tests and the Name of the class was sufficient in all cases except when I tried it on VS 2008, which required me to provide the FullName of the type. So if Name results in error use the Name qualified with the namespace.

Solution 2

These should give you what you're after:

var assemblyName = typeof(ClassNameGoesHere).AssemblyQualifiedName;
var namespaceOfClass = typeof(ClassNameGoesHere).Namespace;

I see you've just added a note to your question regarding "when browsing the classes in the Solution Explorer", the simple answer is that as far as I know, you can't because that's not what Solution Explorer is for (it's there for browsing the files in a solution, not what's contained inside them) and also because:

  1. One file can contain multiple classes
  2. All files in one project will, generally, always compile down to a single assembly, making it redundant to display that name for each file.

You may want to see if the "Class View" gives you what you want, but, I suspect it won't.

Solution 3

You can use F# interative, just open the window (View -> Other Windows -> F# Interactive) and try the following:

> typedefof<System.Uri>.Assembly.FullName;;
    val it : string =
      "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

There are a few assemblies referenced automatically like System. If you need to get the name from another assembly, you'll need to add the reference first (like the service model for example).

> #r "System.ServiceModel.dll";;

--> Referenced 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.ServiceModel.dll'

> typedefof<System.ServiceModel.ICommunicationObject>.Assembly.FullName;;
val it : string =
  "System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

F# interative is part of Visual Studio 2010.

Share:
23,624
Nam G VU
Author by

Nam G VU

I love to learn and try new stuff; dreaming to create ones someday!

Updated on July 15, 2022

Comments

  • Nam G VU
    Nam G VU almost 2 years

    I'm working with WPF and often have the need to get the namespace and assembly name of a given class. But I don't know how to do this.

    So, how can we get the names when browsing the classes in the Solution Explorer or/and when editing the class's codes? Please help!

  • Nam G VU
    Nam G VU almost 14 years
    Hi Rob, I'm looking for a no-coding solution. Thank you anyway.
  • Rob
    Rob almost 14 years
    @Nam Gi VU, I've added an update to take into account your addition to the question regarding Solution Explorer.
  • Nam G VU
    Nam G VU almost 14 years
    I see. I've tried in the Class View but no help there. I've updated to add the case: when editing the class's codes.
  • Nam G VU
    Nam G VU almost 14 years
    Can you explain more about which meta information I should look for?
  • Nam G VU
    Nam G VU almost 14 years
    I tried, but got error "The type or namespace name 'MyClass' is not valid in this scope"
  • João Angelo
    João Angelo almost 14 years
    @Nam Gi VU, instead of MyClass try to use MyNamespace.MyClass.
  • Nam G VU
    Nam G VU almost 14 years
    @Angelo: I put in the full namespace of the class but doesn't work either. I got "'CCC' does not exist in the namespace 'A.BB'" when I pass in typeof(A.BB.CCC.DDDD).AssemblyQualifiedName :)
  • Chris Doyle
    Chris Doyle almost 14 years
    @Nam Gi VU Make sure your application is running
  • João Angelo
    João Angelo almost 14 years
    @Nam Gi Vu, I updated my answer with a missing step (2). Check if that solves the error. It should resolve it, but even if it does this new step kind of removes the simplicity of the solution.
  • Nam G VU
    Nam G VU almost 14 years
    @Angelo: I got it now. Thanks to a colleague of mine idea: need to run the solution and while the application is running, proceed your suggestion steps above. Thank you Angelo.
  • Nam G VU
    Nam G VU almost 14 years
    Don't need to run guys. Just do step 2 (set the start-up project).