Recipe 12.2 Listing Exported Types
Problem
You need to obtain all the
exported types of an assembly. This information allows you to see
what types are usable from outside of this assembly.
Solution
Use
Assembly.GetExportedTypes to obtain the exported
types of an assembly:
using System;
using System.Reflection;
public static void ListExportedTypes(string path)
{
// load the assembly
Assembly asm = Assembly.LoadFrom(path);
Console.WriteLine("Assembly: {0} imports:",path);
// get the exported types
Type[] types = asm.GetExportedTypes( );
foreach (Type t in types)
{
Console.WriteLine ("\tExported Type: {0}",t.FullName);
}
}
The previous example will display all exported, or public, types:
Assembly: C:\C#Cookbook\CSharpRecipes.exe imports:
Exported Type: CSharpRecipes.ClassAndStructs
Exported Type: CSharpRecipes.Line
Exported Type: CSharpRecipes.Square
Exported Type: CSharpRecipes.CompareHeight
Exported Type: CSharpRecipes.Foo
Exported Type: CSharpRecipes.ObjState
Discussion
Obtaining the exported types in an assembly is useful when
determining the public interface to that assembly. This ability can
greatly aid in learning to use a new assembly or can aid the
developer of that assembly in determining all access points to their
assembly and seeing whether they are adequately secure from malicious
code. To get these exported types, we use the
GetExportedTypes method on the
System.Reflection.Assembly type. The exported
types consist of all of the types that are publicly accessible from
outside of the assembly. A type may have public accessibility but not
be accessible from outside of the assembly. Take, for example, the
following code:
public class Outer
{
public class Inner {}
private class SecretInner {}
}
The exported types are Outer and
Outer.Inner; the type
SecretInner is not exposed to the world outside of
this assembly. If we change the Outer
accessibility from public to
private, we now have no types accessible to the
outside world-the Inner class access level
is downgraded because of the private on the
Outer class.
See Also
See the "Assembly Class" topic in
the MSDN documentation
|