2012-03-25 9 views
7

¿Cómo se compilan los archivos .aspx y aspx.cs? ¿Serán dos ensamblajes o ambos estos archivos combinados uno y se crearán como un ensamblaje? ¿Alguna jerarquía/herencia sigue? .aspx se está creando como un archivo de código C# correspondiente (solo entonces podríamos crear un ensamblado ¿correcto? ¿corregirme si estoy equivocado?) como uno en el archivo de windows form designer.cs?¿Cómo se está compilando aspx?

+1

Realmente no entiendo la pregunta, pero tal vez este http://odetocode.com/code/417.aspx y este http://msdn.microsoft.com/en-us/library/015103yb(v= vs.71) .aspx ayudará. –

Respuesta

9

Depende del tipo de proyecto. Con ASP .Net puede crear dos tipos de proyectos: Web Application Project and Web Site Project..

¿Cómo se está compilando el archivo .aspx y aspx.cs?

Con Web Application proyecto se compila el código detrás de los aspx archivos, controles de usuario y otro código que se encuentra en este proyecto en un solo archivo DLL y desplegarlo en el servidor.

Con Web Site Project, simplemente copie el código fuente en el servidor y ASP .Net se encargará de la compilación. El proyecto de sitio web contiene el código fuente de clases personalizadas en la carpeta App_Code (deberá leer más sobre esto en ese enlace)

¿Serán dos conjuntos o estos dos archivos combinados uno y se crearán como uno ¿montaje?

En ninguno de estos casos, el código encontrado en los archivos aspx, ascx no es compilado por usted (usando Visual Studio, etc.). ASP .Net analiza estos archivos y crea un dll almacenado en su carpeta temporal. Los dlls "aspx, ascx" (aunque puede ser más que uno) son archivos diferentes a los creados por usted con Visual Studio (y creo que es diferente de la creada en la carpeta App_Code, ya que ese código no puede código de acceso encontrado en las páginas).

¿Alguna jerarquía/herencia sigue?

Sí. Cuando una página se analiza y se compila, esa clase generada heredará la que se llama en el atributo "Inherits", que se encuentra en la directiva @Page.

<%@ Page Language="C#" CodeBehind="Default.aspx.cs" 
     Inherits="WebApplication1._Default" %> 

ASP .Net análisis sintáctico de archivo Default.aspx y genera una clase que hereda WebApplication1._Default

public class default_aspx : global::WebApplication1._Default 
{ 

} 

dándose la circunstancia de que la clase generada a partir de marcado hereda una clase escrita por nosotros (por lo general el de la código detrás, el archivo aspx.cs), somos libres de utilizar sus miembros o métodos.

El siguiente método es un método de la clase _Default:

protected string ToUpper(string source) 
     { 
      return source.ToUpper(); 
     } 

A continuación, en el marcado podemos llamar:

<form id="form1" runat="server"> 
    <%= ToUpper("Microsoft") %> 
</form> 

Podemos incluso escribir en el marcado algo como:

<% SomeValue = 1; %> 
<%= SomeValue %> 

Donde SomeValue es al menos una propiedad protegida de la clase _Default.

Somos libres para declarar miembros y escribir código de servidor en el marcado también:

<head runat="server"> 

    <script runat="server" language="C#"> 
     private int someCounter = 10; 
    </script> 

</head> 
<body> 
    <% for (var i = 0; i < someCounter; i++) 
     { %> 
     <p> 
      Paragraph number:<%= i %> 
     </p> 
    <% } %> 
</body> 
</html> 

Aquí declaro un campo someCounter y lo uso para escribir 10 párrafos. Por supuesto, esta no es la forma recomendada de hacer tales cosas. Como someCounter es miembro de la clase generada, no se puede acceder a este en el código subyacente.

Hay otra ventaja enorme (y más real) de esta arquitectura. Supongamos que algunas páginas del sitio web son amables estáticas (about.aspx, privacy.aspx, etc.) y usan la misma página maestra. El código detrás de esta página no cambia. Esto significa que podemos crear otras páginas y desplegarlas sin hacer otra compilación del código subyacente (este aspecto se aplica a los proyectos de aplicaciones web). Además, antes de comenzar, podríamos permitir que solo una persona vea estas páginas. Así que para lograr esto creamos una clase PreviewPage

public PreviewPage: System.Web.Page 
{ 
    public PreviewPage() 
    { 
      this.Load += (o, e) => { 
       // code here to see if the authenticated user has the right to see the page 
       // if not, redirect the user to another page 
      } 
    } 
} 

y cambiar el valor Inherits:

<%@ Page Language="C#" Inherits="WebApplication1.PreviewPage" %> 

aspx se crea como un archivo de código correspondiente C#

El atributo Language en el La directiva @Page dicta qué idioma se utiliza para compilar el archivo aspx/ascx. Así que puedes usar VB.Net en el archivo aspx y compilar el sitio web con el compilador C#.

Esta es otra compilación, diferente a la que Visual Studio hace, está hecha con diferentes opciones. Esta es la razón por la cual en web.config hay opciones para configurar el compilationMode en Debug/Release y también para indicar al compilador que use las otras opciones disponibles.

+0

Cuando una página se analiza y se compila, esa clase generada heredará un nombre -> ¿clase generada significa clase aspx/ascx? – deen

+0

Quería decir "named at Inherits". Lo siento, como pueden ver, el inglés no es mi lengua materna y tengo mucho que aprender para deletrear/escribir. Agregué un ejemplo –

Cuestiones relacionadas