Pregunta

Tengo algún código para cargar un archivo EXE y muestra su código CIL para el usuario.Para hacerlo, uso mono.cecil y mono.cecil.cil.

Ahora quiero hacer algo diferente: quiero saber si el usuario tiene mono.cecil y mono.cecil.cil en su sistema.Para hacerlo, pensé en usar la reflexión. Simbly.load con mono.cecil y mono.cecil.cil.Algo así como:

public void PrintInstr( ) {
    try
    {
        Reflect.Assembly mc = Reflect.Assembly.Load( "Mono.Cecil" );
        Reflect.Assembly mcc = Reflect.Assembly.Load( "Mono.Cecil.Cil" );
    }
    catch( Exception )
    {
        System.Console.WriteLine( "\"Mono.Cecil\" or \"Mono.Cecil.Cil\" not found " );
        return;
    }
    //[...]
}

pero solo recibo el siguiente error:

Could not load file or assembly 'Mono.Cecil' or one of its dependencies.
The system cannot find the file specified.

y, por supuesto, tengo mono.cecil y mono.cecil.cil.¿No estoy usando el montaje adecuado.load?Si es el caso, ¿puede alguien decirme cómo usar el ensamblaje.load para poder cargar mono.cecil y mono.cecil.cil sin buscar una ruta (para hacer que se utilice un único archivo EXE en Windows o GNU / Linuxcon mono)?

note : estoy trabajando bajo Linux Mint con Monodevelop 2.6 o en Windows 7 con MonoDevelop 2.8.

¿Fue útil?

Solución

Parece que es un malentendido que montaje. / a> hace para cargar el ensamblaje. Supongo que lo que está tratando de buscar es si el usuario tiene mono.cecil en el GAC. El problema es que solo se buscan las rutas de búsqueda del AppMomain actual cuando proporciona un nombre parcial, el GAC solo se usa cuando suministra el nombre completo. Esto se documenta aquí :

No se recomienda proporcionar

suministrar un nombre de ensamblaje parcial para ensamblaje. (Un nombre parcial omite uno o más de la Cultura, la versión o la clave pública simbólico. Para sobrecargas que toman una cadena en lugar de un nombre de ensamblaje objeto, "myassembly, versión= 1.0.0.0" es un ejemplo de un nombre parcial y "myassembly, versión= 1.0.0.0, cultura= neutral, PublicKeyToken= 18AB3442DA84B47 "es un ejemplo de un nombre completo). Uso Los nombres parciales tienen un efecto negativo en el rendimiento. Además El nombre de montaje parcial puede cargar un ensamblaje de la Asamblea Global caché solo si hay una copia exacta del ensamblaje en el Directorio de base de aplicaciones (Basadoirectory o AppMomainsEtup.ApplicationBase).

Más información sobre cómo se pueden encontrar las sondas CLR para las asambleas aquí: HTTP: //msdn.microsoft.com/en-us/library/aa720133.aspx

Esta es exactamente la razón por la que existe, pero Se ha desaprobado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top