2010-03-29 5 views
0

Ceci est l'erreur que je reçois quand je démarre mon application ASP.NET dans Mono:System.InvalidOperationException compilation application ASP.NET sur Mono

System.InvalidOperationException: The process must exit before getting the requested information. 
    at System.Diagnostics.Process.get_ExitCode() [0x00044] in /usr/src/mono-2.6.3/mcs/class/System/System.Diagnostics/Process.cs:149 
    at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_ExitCode() 
    at Mono.CSharp.CSharpCodeCompiler.CompileFromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) [0x001ee] in /usr/src/mono-2.6.3/mcs/class/System/Microsoft.CSharp/CSharpCodeCompiler.cs:267 
    at Mono.CSharp.CSharpCodeCompiler.CompileAssemblyFromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) [0x00011] in /usr/src/mono-2.6.3/mcs/class/System/Microsoft.CSharp/CSharpCodeCompiler.cs:156 
    at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromFile (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) [0x00014] in /usr/src/mono-2.6.3/mcs/class/System/System.CodeDom.Compiler/CodeDomProvider.cs:119 
    at System.Web.Compilation.AssemblyBuilder.BuildAssembly (System.Web.VirtualPath virtualPath, System.CodeDom.Compiler.CompilerParameters options) [0x0022f] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.Compilation/AssemblyBuilder.cs:804 
    at System.Web.Compilation.AssemblyBuilder.BuildAssembly (System.Web.VirtualPath virtualPath) [0x00000] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.Compilation/AssemblyBuilder.cs:730 
    at System.Web.Compilation.BuildManager.GenerateAssembly (System.Web.Compilation.AssemblyBuilder abuilder, System.Web.Compilation.BuildProviderGroup group, System.Web.VirtualPath vp, Boolean debug) [0x00254] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.Compilation/BuildManager.cs:624 
    at System.Web.Compilation.BuildManager.BuildInner (System.Web.VirtualPath vp, Boolean debug) [0x0011c] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.Compilation/BuildManager.cs:411 
    at System.Web.Compilation.BuildManager.Build (System.Web.VirtualPath vp) [0x00050] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.Compilation/BuildManager.cs:356 
    at System.Web.Compilation.BuildManager.GetCompiledType (System.Web.VirtualPath virtualPath) [0x0003a] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.Compilation/BuildManager.cs:803 
    at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath (System.Web.VirtualPath virtualPath, System.Type requiredBaseType) [0x0000c] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.Compilation/BuildManager.cs:500 
    at System.Web.UI.PageParser.GetCompiledPageInstance (System.String virtualPath, System.String inputFile, System.Web.HttpContext context) [0x0001c] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.UI/PageParser.cs:161 
    at System.Web.UI.PageHandlerFactory.GetHandler (System.Web.HttpContext context, System.String requestType, System.String url, System.String path) [0x00000] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web.UI/PageHandlerFactory.cs:45 
    at System.Web.HttpApplication.GetHandler (System.Web.HttpContext context, System.String url, Boolean ignoreContextHandler) [0x00055] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web/HttpApplication.cs:1643 
    at System.Web.HttpApplication.GetHandler (System.Web.HttpContext context, System.String url) [0x00000] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web/HttpApplication.cs:1624 
    at System.Web.HttpApplication+<Pipeline>c__Iterator2.MoveNext() [0x0075f] in /usr/src/mono-2.6.3/mcs/class/System.Web/System.Web/HttpApplication.cs:1259 

J'ai vérifié le code source indiqué par le stacktrace, à savoir: CSharpCodeCompiler .cs: ​​267

mcs.WaitForExit(); 
result.NativeCompilerReturnValue = mcs.ExitCode; //this throws the exception 

je n'ai pas ideea si cela est un bug dans Mono, ou si mon application est en train de faire quelque chose qu'il shoudn't. Une simple application "Hello World" indique que Mono est correctement installé et fonctionne correctement, C'est juste mon application qui provoque cette exception.

Espérant certains esprits Enlighted ont plus sur la question

Je suis runing Apache + mod_mono 2.6.3 sur un CentOS 5.4 serveur.

Ce qui semble faire la différence entre un simple « Bonjour tout le monde » et mon application, est qu'il n'y a un tas de choses passe dans Application_Start de Global.asax(). Il y a des sockets TCP ouvertes (et fermées), des dizaines de nouveaux threads engendrés (environ 80) et divers services démarrés et fermés. Dans un serveur Windows + IIS normal, l'application prend jusqu'à 30 secondes pour démarrer. Pourquoi cela ferait-il une différence dans Mono?

Edit:

Chose intéressante, une façon de contourner ce problème est de déplacer tout le code de Application_Start dans un processus async séparé:

void Application_Start() 
{ 
var t = new System.Threading.Thread(new ThreadStart(this.Async_Application_Start)); 
t.Start(); 
} 

void Async_Application_Start() 
{ 
    ... Lots of stuff going on here.. 

    log('Async Application Start is done!'); // this actually gets logged, so the code DOES execute and end 
} 
+0

Quel serveur web utilisez-vous et pouvez-vous fournir des informations sur votre webapp? – yojimbo87

Répondre

1

Essayez de regarder this poste.

+0

J'ai vu ce fil avant; Hélas, la réponse acceptée ici, recommande d'ajouter un WaitForExit() avant d'utiliser le ExitCode; ce qui est exactement ce que le code Mono fait de toute façon :-( – Radu094

+0

Oui, mais essayons d'abord de trouver le bogue dans le code webapp plutôt que dans le mono car vous avez dit qu'il y a beaucoup de choses dans Global.asax: créez-vous pouvez-vous déboguer votre webapp étape par étape dans Application_Start()? – yojimbo87

+0

Je ne peux pas déboguer l'application de l'IDE.J'utilise VS2010 -> Publier -> manuel de copier les fichiers via Samba.Oui, il y a environ 80 de nouveaux processus démarrés Ignorer le programme Application_Start() fonctionne correctement, mais je ne peux pas l'enlever ligne par ligne, car les processus sont interconnectés et dépendent l'un de l'autre pour fonctionner correctement.Il n'y a pas d'exception levée (j'enregistre chaque exception). – Radu094