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?
risposta
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.
Quando una pagina viene analizzata e compilata, quella classe generata erediterà l'unico nome -> classe generata significa classe aspx/ascx? – deen
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 –
- 1. Perché viene compilato?
- 2. Java: come mai questo non viene compilato?
- 3. Perché questo enum viene compilato?
- 4. A() = A() - perché viene compilato?
- 5. Perché questo codice Haskell viene compilato?
- 6. Perché {$ ifopt FINITEFLOAT ON} non viene compilato?
- 7. Perché questo codice C viene compilato?
- 8. Java 8 flatMap + Optional.of non viene compilato
- 9. Uso strano di const: perché viene compilato?
- 10. Perché un delegato senza parametri viene compilato?
- 11. Perché il codice non viene compilato?
- 12. jqGrid non viene compilato con i dati
- 13. TwitterKit non viene compilato con Xcode 6.3
- 14. non viene compilato. Non riconosce "static function_entry"
- 15. java.lang.Object o = 1; // perché viene compilato?
- 16. Perché questo codice C# non viene compilato?
- 17. Perché questo programma equivalente non viene compilato?
- 18. Perché e come viene compilato questo codice Java?
- 19. Il dattiloscritto non viene compilato se si trova nella sottocartella?
- 20. Perché questo programma C viene compilato senza errori?
- 21. ARM Compilato deliberatamente codice compilato?
- 22. Perché viene compilato il codice con punti e virgola successivi?
- 23. instanceof in Java - perché questo non viene compilato?
- 24. Perché il seguente codice viene compilato senza errori?
- 25. Python Threading.Timer oggetto non funziona quando viene compilato a .exe
- 26. Funzionalità o errore: perché viene compilato questo codice Java?
- 27. Il file di generazione dei bind XML non viene compilato
- 28. Riferimento alla variabile non finale: perché questo codice viene compilato?
- 29. Come mai questo ciclo viene eseguito ugualmente velocemente quando compilato con -O3, ma non quando è compilato con -O2?
- 30. Il codice C++ viene compilato in codici assembly?
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à. –