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.
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 (" Exported Type: {0}",t.FullName); } }
The previous example will display all exported, or public, types:
Assembly: C:C#CookbookCSharpRecipes.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
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.