2011-09-02 15 views
13

Estoy tratando de usar Type.GetType y pasar el nombre completo de clase "caLibClient.entity.Web2ImageEntity". El caLibClient.entity es espacio de nombres, ubicado en un conjunto separado (caLibClient) y agregado a la lista de ensambles de referencia del programa. Type.GetType siempre devuelve Null cuando lo llamo desde el programa, ¿qué pasa?Type.GetType return null

Respuesta

24

es necesario agregar el nombre de ensamblado, así, ya que su tipo no está en el conjunto delejecución (ni mscorlib.) Así que la llamada debe ser:

var myType = Type.GetType("caLibClient.entity.Web2ImageEntity, FullAssemblyName"); 

Desde el Type.GetType() docs:

typeName
Tipo: System.String
El nombre calificado para ensamblar del tipo que se va a obtener. Consulte AssemblyQualifiedName. Si el tipo está en el ensamblado actualmente en ejecución o en Mscorlib.dll, es suficiente con proporcionar el nombre de tipo calificado por su espacio de nombre.

Desde el docs for AssemblyQualifiedName, este es un nombre de la muestra:

TopNamespace.SubNameSpace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089 

actualización: Si ya está haciendo referencia a la asamblea en su proyecto, y saber en tiempo de compilación lo que el tipo nombre es decir, es mejor decir

Type myType = typeof(caLibClient.entity.Web2ImageEntity); 

ya que no es necesario buscar el tipo en tiempo de ejecución; el compilador hará todo por ti.

+0

¿Cómo encontrar el nombre completo para el ensamblaje? No estoy seguro si entiendo correctamente lo que significa. ¿Dónde mirar? – Tomas

+0

@Tomas ¿Cuál es el nombre del conjunto al que hizo referencia? – dlev

1

lo necesario para pasar un assembly qualified name, en su caso, algo como esto:

var yourType = Type.GetType("caLibClient.entity.Web2ImageEntity,caLibClient"); 
+0

Todavía me sale nulo – Tomas

1

Si conoces a un tipo en la asamblea que el tipo de destino vive en ti puede evitar la codificación dura del nombre calificado de ensamblaje completo. Por ejemplo:

Type.GetType(
    "MyAssembly.Foo.BarSubclass, " + typeof(MyAssembly.Foo.IBar).Assembly.FullName) 
Cuestiones relacionadas