Ho la seguente definizione nella parte superiore del mio file .ASCX:Visual Studio 2008 perde intellisense per ASCX con CodeBehind (ma funziona per CodeFile)?
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
In quel controllo faccio uso di <% =%> blocchi per riferirsi ai membri che ho dichiarato nel code-behind file. Se compilo e distribuisco il controllo, funziona correttamente. Ma in Visual Studio ho un sacco di errori in fase di progettazione, "{alcune variabili} non esistono nel contesto attuale." E anche Intellisense si rompe: funziona per i membri di UserControl, ma non riesce a trovare i miei membri dichiarati. Ci sono anche altri problemi. In generale, tutto fa riferimento al fatto che la classe ASP.articleview_ascx che viene generata non eredita in qualche modo dalla classe MyNameSpace.ArticleView.
Ho scoperto che se passo l'attributo CodeBehind a "CodeFile":
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
improvvisamente funziona Intellisense e tutti gli errori in fase di progettazione scomparire. Ma non voglio fare la compilazione runtime, o distribuire i miei file .ASCX.CS - quindi non posso usare CodeFile.
Ho controllato le cose semplici, come verificare che il mio nome file CodeBehind sia corretto & la classe Inherits ha lo spazio dei nomi corretto, ecc. (E poiché funziona correttamente dopo aver cambiato l'attributo in CodeFile, questi devono puntare a il posto giusto ....) Ma cosa mi manca? Perché non può gestire l'attributo CodeBehind?
Grazie,
Steve
Aggiornamento: da un thread qui sotto - questione di fondo è stato, perché non basta usare CodeFile? Risposta: quando si tenta di distribuire utilizzando CodeFile = nei miei file, dopo la distribuzione ricevo il seguente stack trace (presentata nella sua interezza):
/_layouts/Pages/ViewPage.aspx.cs' non esiste. su System.Web.UI.Util.CheckVirtualFileExists (VirtualPath virtualPath) su System.Web.UI.TemplateParser.ProcessCodeFile (VirtualPath codeFileVirtualPath) su System.Web.UI.TemplateParser.ProcessMainDirectiveAttribute (String deviceName, String name, String value, IDictionary parseData)
(Questo è da una richiesta di /_layouts/Pages/ViewPage.aspx. ViewPage è la pagina che ha diversi altri controlli tra cui la dettagliata degli articoli di cui al mio esempio originale. succede solo per essere il primo file che fallisce - se torno a CodeBehind = in ViewPage, quindi ASCX incluso con CodeFile = fallirà nello stesso modo.) Questo sembra essere il compilatore di pagine che si lamenta perché la classe codebehind ereditata non può essere trovata in nessuna DLL caricata, quindi si aspetta che ci debba essere un file CS per effettuare la compilazione su richiesta.
Il problema qui è che non voglio distribuire file CS, solo ASPX/ASCX. Dopo aver letto molti articoli come this great one, sono a conoscenza dei vari nuovi modelli di implementazione, sebbene non abbia mai usato altro che un progetto di applicazione Web (convertito in avanti da VS2003, siamo stati in ritardo nell'adozione del 2005 & il modello WAP era già stato aggiunto al momento in cui siamo passati dal 2003.) In molti progetti VS2005/8, non ho mai avuto un problema con CodeBehind =, fino a quando questo problema Intellisense non si è verificato ... anche se non aiuta in questo caso, io ' m la distribuzione in SharePoint, che introduce un nuovo livello di complessità.
Poiché non ho distribuito utilizzando CodeFile in precedenza, è molto probabile che manchi qualche opzione che dovrei impostare in VS al momento della compilazione, al fine di forzare una pre-compilazione.Devo solo essere in grado di distribuire, come faccio oggi, come un set di ASPX/ASCX con un singolo codebehind DLL. E questo funziona oggi con CodeBehind = ... ha solo il problema Intellisense, che è quello che voglio risolvere :)
Pubblicherò più mentre identifico quali file potrebbero essere rilevanti per la domanda ...
Avere hai selezionato la Build Action sui file ? –