2012-03-25 14 views
7

Come viene compilato il file .aspx e aspx.cs? saranno due assembly o entrambi questi file combinati e saranno creati come un unico assembly? Segue una qualsiasi gerarchia/ereditarietà? .aspx viene creato come un file di codice C# corrispondente (solo allora potremmo creare un assembly right? correggimi se ho torto!) come quello in windows form designer.cs file?Come viene compilato l'aspx?

+1

Non capisco davvero la domanda, ma forse questo http://odetocode.com/code/417.aspx e questo http://msdn.microsoft.com/en-us/library/015103yb(v= vs.71) .aspx aiuterà. –

risposta

9

Dipende dal tipo di progetto. Con ASP .Net è possibile creare due tipi di progetti: Web Application Project and Web Site Project..

Come viene compilato il file .aspx e aspx.cs?

Con Web Application progetto si compila il codice dietro dei file aspx, controlli utente e altro codice trovato in questo progetto in una singola DLL e distribuirlo sul server.

Con Web Site Project è sufficiente copiare il codice sorgente sul server e ASP .Net gestirà la compilazione per voi. Il progetto del sito Web contiene il codice sorgente delle classi personalizzate nella cartella App_Code (sarà necessario leggere ulteriori informazioni su questo link)

Si tratterà di due assembly o di entrambi questi file combinati uno e verranno creati come uno solo montaggio?

In nessuno di questi casi, il codice trovato nei file aspx, ascx non è compilato da voi (utilizzando Visual Studio, ecc). ASP .Net analizza questi file e crea una dll memorizzata nella sua cartella temporanea. Le dll "aspx, ascx" (anche se possono essere più di una singola) sono file diversi da quello creato da te con Visual Studio (e credo sia diverso da quello creato dalla cartella App_Code, dal momento che quel codice non può codice di accesso trovato nelle pagine).

Segue qualsiasi gerarchia/ereditarietà?

Sì. Quando una pagina viene analizzata e compilata, quella classe generata erediterà quella denominata nell'attributo "Inherits", trovata nella direttiva @Page.

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

ASP .Net analizza file default.aspx e genera una classe che eredita WebApplication1._Default

public class default_aspx : global::WebApplication1._Default 
{ 

} 

Dare il fatto che la classe generata da markup eredita una classe scritto da noi (di solito quello del codice sottostante, il file aspx.cs), siamo liberi di usare i suoi membri o metodi.

Il seguente metodo è un metodo della classe _Default:

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

Poi nel markup che possiamo chiamare:

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

Possiamo anche scrivere in marcatura qualcosa di simile:

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

Dove SomeValue è almeno una proprietà protetta della classe _Default.

siamo liberi di dichiarare membri e scrivere il codice del server nella marcatura anche:

<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> 

Qui mi dichiaro un campo someCounter e utilizzarlo per scrivere 10 paragrafi. Ovviamente questo non è il modo consigliato per fare queste cose. Poiché someCounter è un membro della classe generata, questo non è accessibile nel codice sottostante.

C'è un altro enorme (e più reale) vantaggio di questa architettura. Supponiamo che alcune pagine del sito Web siano di tipo statico (about.aspx, privacy.aspx, ecc.), Usano la stessa pagina Master. Il codice sottostante in queste pagine non cambia. Ciò significa che possiamo creare altre pagine e distribuirle senza eseguire un'altra compilazione del codice (questo aspetto si applica ai progetti di applicazioni Web). Inoltre, prima di andare in diretta, potremmo consentire a una sola persona di vedere queste pagine. Quindi, per raggiungere questo obiettivo abbiamo creato una classe 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 
      } 
    } 
} 

e modificare il valore Inherits:

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

aspx è stato creato come un file di codice corrispondente C#

L'attributo Language nel La direttiva @Page stabilisce quale linguaggio viene utilizzato per compilare il file aspx/ascx. Quindi puoi effettivamente usare VB.Net nel file aspx e compilare il sito web con il compilatore C#.

Questa è un'altra compilation, diversa da quella di Visual Studio, è realizzata con diverse opzioni. Questo è il motivo per cui in web.config ci sono opzioni per impostare compilationMode su Debug/Release e per istruire il compilatore a utilizzare le altre opzioni disponibili.

+0

Quando una pagina viene analizzata e compilata, quella classe generata erediterà l'unico nome -> classe generata significa classe aspx/ascx? – deen

+0

Volevo dire "named in Inherits". Mi spiace, come puoi vedere, l'inglese non è il mio nativo e ho molto da imparare a scrivere/scrivere. Ho aggiunto un esempio –

Problemi correlati