2012-05-02 17 views
5

Quindi mi sembra di avere qualche difficoltà nel rendere il mio CodeFile di riferimento in CodeBehind. Prima di chiedere, non ho Visual Studio e non sono su Windows. Il codice è ospitato su un server IIS a cui ho accesso.Conversione di CodeFile in CodeBehind

<% @Page Language="C#" Inherits="corn.cheese.pies.CasLogin" CodeFile="anon.cs" %> 

Questo codice funziona perfettamente, ma su di cambiarla a:

<% @Page Language="C#" Inherits="corn.cheese.pies.CasLogin" CodeBehind="anon.cs" %> 

la pagina restituisce un errore:

Parser Error Message: Could not load type 'corn.cheese.pies.CasLogin'. 
+2

Credo che code-behind richieda che la classe di controllo ereditata sia disponibile nella DLL dell'applicazione Web. Perché è necessario/si aspetta di poterlo fare senza Visual Studio? – millimoose

+1

Non è una risposta, davvero, ma: perché stai andando da CodeFile -> CodeBehind? Generalmente le persone fanno il * altro * modo, dal momento che CodeFile è "più recente" (nel relativo senso "7 anni contro 9 anni"). –

risposta

14

Sei sicuro di capire la differenza tra CodeFile e CodeBehind? Vedere, ad esempio, CodeFile vs CodeBehind (ignorare la risposta di accettazione, tuttavia, entrambi i collegamenti sono dea) o this article sulla differenza.

In poche parole:

Un file CodeBehind si presume essere compilato in un assembly che viene distribuito nella cartella bin del tuo sito web. Quando il motore ASP.NET carica il file aspx, utilizza la direttiva Inherits per provare a trovare quella classe. Il file CodeBehind viene utilizzato principalmente per semplificare la compilazione (e gli strumenti, ad esempio "Visualizza origine") ma il lavoro viene eseguito in fase di compilazione.

Un file CodeFile si trova e compilato da ASP.NET in fase di runtime, su richiesta. È possibile "pre-compilare" il proprio sito Web per ricorrere al modello precedente, il che è utile se non si desidera distribuire il codice sorgente in ogni sito Web. Tuttavia, per impostazione predefinita, il file CodeFile è un file .cs distribuito nel sito e la classe viene generata nella cartella di archiviazione temporanea di ASP.NET. (Dal punto di vista tecnico: le pagine CodeFile sono definizioni partial class, con solo la parte code-behind personalizzata della classe effettivamente distribuita nel file C#, motivo per cui CodeFile non esisteva inizialmente, perché il compilatore C# non poteva inizialmente fare classi parziali .)

Passando da CodeFile a CodeBehind si sta dicendo a ASP.NET di ignorare la presenza del file C# e di cercarlo solo nell'assieme compilato. A sua volta, ASP.NET ti dice che l'assembly compilato in realtà non contiene la classe che gli hai detto di cercare.

Problemi correlati