2011-08-22 3 views
2

J'ai récupéré la classe suivante d'un convertisseur CIL vers C# (réflecteur .Net). Malheureusement, VS2010 ne le compilera pas. Une idée de comment je peux le faire fonctionner?Pourquoi ce code désassemblé n'est-il pas compilé en C#?

using System; 
using System.IO; 
using System.Reflection; 
internal class <Module> 
{ 
    static <Module>() 
    { 
     IPLRes.ExeDirectory = new FileInfo(Assembly.GetExecutingAssembly>>().Location).DirectoryName; 
     AppDomain expr_1E = AppDomain.CurrentDomain; 
     expr_1E.AssemblyResolve += new ResolveEventHandler(expr_1E.AssemblyNotFound); 
     IPLRes.LogDirectory = IPLRes.ExeDirectory + "\\log"; 
     IPLMsg.Log("Loader", "Application starting..."); 
    } 
    public static Assembly AssemblyNotFound(object A_0, ResolveEventArgs A_1) 
    { 
     string text = A_1.Name; 
     text = text.Remove(text.IndexOf(",")); 
     text = IPLRes.ExeDirectory + "\\bin35\\" + text + ".dll"; 
     return Assembly.LoadFile(text); 
    } 
    [STAThread] 
    public static void IPLMain(string[] A_0) 
    { 
     if (A_0.Length >= 1) 
     { 
      IPLRes.BatchMode = A_0[0].Contains("batch"); 
     } 
     if (!IPLRes.BatchMode) 
     { 
      IPLRes.ShowSplash("ipl_splash.png"); 
     } 
     string[] array = new string[] 
     { 
      "-X:FullFrames", 
      "-X:Python30", 
      "-c", 
      IPLRes.GetString("ipl_entrypoint35.py") 
     }; 
     IPLMsg.Log("Loader", "Starting main interpreter"); 
     IPLRes.MainInterpreter = new IronPythonHost(); 
     if (IPLRes.MainInterpreter.Run(array) != 0) 
     { 
      array = new string[] 
      { 
       "-c", 
       IPLRes.GetString("ipl_crash.py") 
      }; 
      IPLMsg.Log("Loader", "Starting crash handler interpreter"); 
      IPLRes.CrashInterpreter = new IronPythonHost(); 
      IPLRes.CrashInterpreter.Run(array); 
     } 
     IPLMsg.Log("Loader", "Application shutting down."); 
     IPLMsg.DumpLogFile(); 
    } 
} 
+0

Je ne comprends pas la question. Qu'est-ce que "* mais VS2010 ne peut accepter aucune idée ?? *" supposé vouloir dire? –

+0

Cela signifie que le compilateur balbutient lorsqu'il tente de compiler la classe nommée illégalement ''. Regardez la réponse de SLaks pour voir ce qui se passe réellement ici. – dlev

+0

Envisagez d'ajouter le message d'erreur du compilateur spécifique - même si le problème (s) peut être vu sans elle, il ajoute l'arrière-plan et la référence. –

Répondre

7

Ceci est un initialiseur de module, que C# ne prend pas en charge.

Vous pouvez le placer dans Main() à la place.
Vous devrez déplacer le reste de Main() vers une méthode distincte afin qu'il puisse être désactivé après l'ajout du gestionnaire AssemblyResolve.

+0

Fonctionne pour moi. Merci bros. –

+0

[Initialiseurs de module en C#] (http://stackoverflow.com/questions/1915506/module-initializers-in-c-sharp/17379410#17379410) –

Questions connexes