[Mono-list] Global.asax.cs problems; from Visual Studio .NET to Mono/XSP.

Roberto Jimeno jimeno@servidor.unam.mx
28 Apr 2004 12:01:31 -0500

Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Hi there!

I have some code generated using VS.NET. I tried to run that very same
code using Mono/XSP and I got an error 500
(System.NullReferenceException) from it. Apparenly this is due to a line
where `Application["ContadorAccesos"].ToString()' is consulted before it
is initialized.

The trick here is that `Application["ContadorAccessos"]' is actually
initialized in the Global.asax.cs file (set to zero on the method
"Application_Start" of class "Global". Somehow VS.NET executes the
initialization prior to the value being consulted, while Mono/XSP does

I have tried stuff like compiling the files in different ways and under
different names; none of them with success. The latest command line I
used was "mcs Global.asax.cs AssemblyInfo.cs Session.aspx.cs
-r:System.Web -r:System.Drawing -r:System.Data -t:library -o

The stack trace is shown at the bottom of this message, and the four
related files are attached as well. I hope you can help me understand
how to use the Global.asax(.cs) file(s) and anything else I should know
in order to be able to deploy some of my VS.NET generated code using

Thanks for your help.

Stack Trace:

System.NullReferenceException: Object reference not set to an instance
of an object
in <0x0003d> WebAppLatam.Session:Page_Load (object,System.EventArgs)
in <0x0005a> (wrapper delegate-invoke) System.MulticastDelegate:invoke_void_object_EventArgs (object,System.EventArgs)
in <0x00090> System.Web.UI.Control:OnLoad (System.EventArgs)
in <0x00033> System.Web.UI.Control:LoadRecursive ()
in <0x0018b> System.Web.UI.Page:InternalProcessRequest ()
in <0x0008d> System.Web.UI.Page:ProcessRequest (System.Web.HttpContext)
in <0x00327> ExecuteHandlerState:Execute ()
in <0x0007e> StateMachine:ExecuteState (System.Web.HttpApplication/IStateHandler,bool&)

Content-Disposition: attachment; filename=Session.aspx
Content-Type: text/plain; name=Session.aspx; charset=us-ascii
Content-Transfer-Encoding: quoted-printable

<%@ Page language=3D"c#" Codebehind=3D"Session.aspx.cs" AutoEventWireup=3D"=
false" Inherits=3D"WebAppLatam.Session" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
		<meta name=3D"GENERATOR" Content=3D"Microsoft Visual Studio .NET 7.1">
		<meta name=3D"CODE_LANGUAGE" Content=3D"C#">
		<meta name=3D"vs_defaultClientScript" content=3D"JavaScript">
		<meta name=3D"vs_targetSchema" content=3D"http://schemas.microsoft.com/in=
		<form id=3D"Form1" method=3D"post" runat=3D"server">
			<P><FONT color=3D"#6666ff" size=3D"5"><STRONG>Application y Session</STR=
			<P>Numero de accesos:
				<asp:Label id=3D"lblContador" runat=3D"server"></asp:Label></P>
				<asp:Button id=3D"btnContador" runat=3D"server" Text=3D"Incrementa el c=
			<P><FONT color=3D"#cc66cc" size=3D"5"><STRONG>Autenticacion</STRONG></FO=
				<asp:TextBox id=3D"txtNombre" runat=3D"server"></asp:TextBox></P>
				<asp:TextBox id=3D"txtClave" runat=3D"server"></asp:TextBox></P>
				<asp:Button id=3D"btnCrea" runat=3D"server" Text=3D"Crear sesion"></asp=
				<asp:Button id=3D"btnLee" runat=3D"server" Text=3D"Leer sesion"></asp:B=
				<asp:Button id=3D"btnAbandona" runat=3D"server" Text=3D"Abandonar sesio=
				<asp:Label id=3D"lblSesion" runat=3D"server"></asp:Label></P>
				<asp:HyperLink id=3D"HyperLink1" runat=3D"server" ImageUrl=3D"VerificaS=
ession.aspx">Verifica Sesion</asp:HyperLink></P>

Content-Disposition: attachment; filename=Session.aspx.cs
Content-Type: text/plain; name=Session.aspx.cs; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WebAppLatam
	/// <summary>
	/// Descripci=F3n breve de Session.
	/// </summary>
	public class Session : System.Web.UI.Page
		protected System.Web.UI.WebControls.Label lblContador;
		protected System.Web.UI.WebControls.Button btnContador;
		protected System.Web.UI.WebControls.TextBox txtNombre;
		protected System.Web.UI.WebControls.TextBox txtClave;
		protected System.Web.UI.WebControls.Button btnCrea;
		protected System.Web.UI.WebControls.Button btnLee;
		protected System.Web.UI.WebControls.Button btnAbandona;
		protected System.Web.UI.WebControls.Label lblSesion;
		protected System.Web.UI.WebControls.HyperLink HyperLink1;

		private void Page_Load(object sender, System.EventArgs e)
			// Introducir aqu=ED el c=F3digo de usuario para inicializar la p=E1gina
			this.lblContador.Text =3D Application["ContadorAccesos"].ToString();

		#region C=F3digo generado por el Dise=F1ador de Web Forms
		override protected void OnInit(EventArgs e)
			// CODEGEN: llamada requerida por el Dise=F1ador de Web Forms ASP.NET.
		/// <summary>
		/// M=E9todo necesario para admitir el Dise=F1ador. No se puede modificar
		/// el contenido del m=E9todo con el editor de c=F3digo.
		/// </summary>
		private void InitializeComponent()
		{   =20
			this.btnContador.Click +=3D new System.EventHandler(this.btnContador_Cli=
			this.btnCrea.Click +=3D new System.EventHandler(this.btnCrea_Click);
			this.btnLee.Click +=3D new System.EventHandler(this.btnLee_Click);
			this.btnAbandona.Click +=3D new System.EventHandler(this.btnAbandona_Cli=
			this.Load +=3D new System.EventHandler(this.Page_Load);


		private void btnContador_Click(object sender, System.EventArgs e)
			Application["ContadorAccesos"] =3D Convert.ToInt64(Application["Contador=
Accesos"]) + 10;

		private void btnCrea_Click(object sender, System.EventArgs e)
			if (this.txtNombre.Text !=3D "" || this.txtClave.Text !=3D "" )
				Session["Usuario"] =3D this.txtNombre.Text;
			Session["Clave"] =3D this.txtClave.Text;
			this.lblSesion.Text =3D "Sesion creada con =E9xito !!!";

		private void btnLee_Click(object sender, System.EventArgs e)
			this.lblSesion.Text =3D "Session ID: " + Session.SessionID +
				" - Usuario: " + Session["Usuario"] +=20
				" - Clave: " + Session["Clave"];

		private void btnAbandona_Click(object sender, System.EventArgs e)

Content-Disposition: attachment; filename=Global.asax.cs
Content-Type: text/plain; name=Global.asax.cs; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Web; 
using System.Web.SessionState; 

namespace WebAppLatam 
        /// <summary> 
        /// Descripción breve de Global. 
        /// </summary> 
        public class Global : System.Web.HttpApplication 
                /// <summary> 
                /// Variable del diseñador requerida. 
                /// </summary> 
                private System.ComponentModel.IContainer components = null; 

                public Global() 
                protected void Application_Start(Object sender, EventArgs e) 
                        Application["ContadorAccesos"] = 0; 
                protected void Session_Start(Object sender, EventArgs e) 


                protected void Application_BeginRequest(Object sender, EventArgs e) 


                protected void Application_EndRequest(Object sender, EventArgs e) 


                protected void Application_AuthenticateRequest(Object sender, EventArgs e) 


                protected void Application_Error(Object sender, EventArgs e) 


                protected void Session_End(Object sender, EventArgs e) 


                protected void Application_End(Object sender, EventArgs e) 

                #region Código generado por el Diseñador de Web Forms 
                /// <summary> 
                /// Método necesario para admitir el Diseñador. No se puede modificar 
                /// el contenido del método con el editor de código. 
                /// </summary> 
                private void InitializeComponent() 
                        this.components = new System.ComponentModel.Container(); 

Content-Disposition: attachment; filename=AssemblyInfo.cs
Content-Type: text/plain; name=AssemblyInfo.cs; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

using System.Reflection;
using System.Runtime.CompilerServices;

// La informaci=F3n general de un ensamblado se controla mediante el siguie=
// conjunto de atributos. Cambie estos atributos para modificar la informac=
// asociada con un ensamblado.
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]	=09

// La informaci=F3n de versi=F3n de un ensamblado consta de los siguientes =
cuatro valores:
//      Versi=F3n principal
//      Versi=F3n secundaria=20
//      Versi=F3n de compilaci=F3n
//      Revisi=F3n
// Puede especificar todos los valores o usar los valores predeterminados (=
n=FAmero de versi=F3n de compilaci=F3n y de revisi=F3n)=20
// usando el s=EDmbolo '*' como se muestra a continuaci=F3n:

[assembly: AssemblyVersion("1.0.*")]

// Si desea firmar el ensamblado, debe especificar una clave para su uso. C=
onsulte la documentaci=F3n de=20
// Microsoft .NET Framework para obtener m=E1s informaci=F3n sobre la firma=
 de ensamblados.
// Utilice los atributos siguientes para controlar qu=E9 clave desea utiliz=
ar para firmar.=20
// Notas:=20
//   (*) Si no se especifica ninguna clave, el ensamblado no se firma.
//   (*) KeyName se refiere a una clave instalada en el Proveedor de servic=
//       de cifrado (CSP) en el equipo. KeyFile se refiere a un archivo que=
//       una clave.
//   (*) Si se especifican los valores KeyFile y KeyName, tendr=E1=20
//       lugar el siguiente proceso:
//       (1) Si KeyName se puede encontrar en el CSP, se utilizar=E1 dicha =
//       (2) Si KeyName no existe pero s=ED KeyFile, se instalar=E1=20
//           y utilizar=E1 la clave de KeyFile en el CSP.
//   (*) Para crear KeyFile, puede ejecutar la utilidad sn.exe (Strong Name=
//        Cuando se especifica KeyFile, la ubicaci=F3n de KeyFile debe ser
//        relativa al "directorio de resultados del proyecto". La ubicaci=
=F3n del directorio de resultados
//        del proyecto depende de si se est=E1 trabajando con un proyecto W=
eb o local.
//        En proyectos locales, el directorio de resultados del proyecto se=
 define como
//       <Directorio del proyecto>\obj\<Configuration>. Por ejemplo, si Key=
//       se encuentra en el directorio del proyecto, el atributo AssemblyKe=
yFile se especifica=20
//       como [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
//        En proyectos Web, el directorio de resultados del proyecto se def=
ine como
//       %RUTA PRINCIPAL%\VSWebCache\<Nombre del equipo>\<Directorio del pr=
//   (*) (*) Firma retardada es una opci=F3n avanzada; consulte la document=
aci=F3n de
//       Microsoft .NET Framework para obtener m=E1s informaci=F3n.
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]