c# xamarin - MonoTouch 4.0 arrojando ReflectionTypeLoadException usando el simulador





ios windows (2)


La causa principal es que el simulador de iOS solo actualiza archivos, nunca los elimina (incluso si elimina su aplicación del simulador).

Esto causa problemas si tiene algunos archivos (por ejemplo, System.Xml.Linq) en un punto y los elimina más adelante (directamente o usa el enlazador que puede eliminarlo). A partir de ahí, tendrá algunos archivos viejos y obsoletos en el directorio de la aplicación del simulador.

El siguiente problema es que MonoTouch registra todas las asambleas presentes en el directorio. Esto significa que el obsoleto también está registrado en el simulador. En esta etapa, esto puede funcionar (y no verá un error) o podría fallar (con el error que tiene arriba) porque el ensamblaje obsoleto no tiene todo lo que necesita para cargarse correctamente.

La solución más fácil es restablecer el simulador de iOS, que eliminará todo (todas las aplicaciones y todos los archivos).

Desde que actualicé una aplicación MonoTouch 3.x a MonoTouch 4.0, recibí el siguiente error al intentar iniciar una versión de Debug o Release en el Simulator:

Unhandled Exception: System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool)
  at System.Reflection.Assembly.GetTypes () [0x00000] in <filename unknown>:0 
  at MonoTouch.ObjCRuntime.Runtime.RegisterAssembly (System.Reflection.Assembly a) [0x00000] in <filename unknown>:0 

El problema parece ser con System.Xml.Linq, sin embargo, he verificado todos los proyectos y referencias, y esto ni siquiera parece ser una referencia transitiva de lo que puedo decir. Simplemente no parece estar usando esto en ninguna parte .

El mensaje de excepción siempre es "No se pudo cargar System.Xml.Linq.XNodeNavigator desde System.Xml.Linq".

¿Alguien tiene alguna idea?




De acuerdo con el Estándar C # (ECMA-334), un método se define como lo siguiente:

Un método es un miembro que implementa una computación o acción que puede ser realizada por un objeto o clase. Los métodos tienen una lista (posiblemente vacía) de parámetros formales, un valor de retorno (a menos que el tipo de retorno del método sea nulo) y sean estáticos o no estáticos.

( ECMA-334 ; 8.7.3: Métodos).

Ahora, el estándar CLI define lo siguiente:

No se permite que el control simplemente "caiga" al final de un método. Todas las rutas terminarán con una de estas instrucciones: ret, throw, jmp o (tail. Seguido de call, calli o callvirt).

( ECMA-335 ; 12.4, 6)

Esto significa que, en C #, un método que devuelve un void no necesita una declaración de retorno. Sin embargo, a medida que el compilador de C # compila el código de C # en el código IL, que requiere una terminación de ruta al final de un método, emite una ret para finalizar el método.







c# ios mono xamarin.ios ios-simulator