J'ai la définition suivante en haut de mon fichier .ascx:Visual Studio 2008 perdre intellisense pour ASCX avec CodeBehind (mais fonctionne pour CodeFile)?
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
Dans ce contrôle, je fais usage de <% =%> blocs pour désigner les membres que j'ai déclaré dans le code-behind fichier. Si je compile et déploie le contrôle, cela fonctionne très bien. Mais dans Visual Studio, je reçois beaucoup d'erreurs de conception, "{une variable} n'existe pas dans le contexte actuel." Et Intellisense se brise aussi: cela fonctionne pour les membres de UserControl, mais ne peut pas trouver mes propres membres déclarés. Il y a aussi d'autres problèmes. En général, tout indique que la classe ASP.articleview_ascx générée ne hérite pas de la classe MyNameSpace.ArticleView.
J'ai trouvé que si je passe l'attribut CodeBehind « CodeFile »:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ArticleView.aspx.cs" Inherits="MyNameSpace.ArticleView" %>
soudainement IntelliSense fonctionne et toutes les erreurs en temps de conception disparais. Mais je ne veux pas faire de compilation d'exécution, ou déployer mes fichiers .ASCX.CS - donc je ne peux pas utiliser CodeFile.
J'ai vérifié les choses simples, comme m'assurer que mon nom de fichier CodeBehind est correct & la classe Inherits a l'espace de noms approprié, etc (Et puisque cela fonctionne correctement après avoir changé l'attribut en CodeFile, ceux-ci doivent pointer sur au bon endroit ....) Mais qu'est-ce qui me manque? Pourquoi ne peut-il pas gérer l'attribut CodeBehind?
Merci,
Steve
Mise à jour: à partir d'un fil ci-dessous - question de base a été, pourquoi ne pas simplement utiliser CodeFile? Réponse: lorsque je tente de déployer à l'aide CodeFile = dans mes fichiers, après le déploiement, je reçois la trace de pile suivante (présentée dans son intégralité):
/_layouts/Pages/ViewPage.aspx.cs' n'existe pas. à System.Web.UI.Util.CheckVirtualFileExists (VirtualPath virtualPath) à System.Web.UI.TemplateParser.ProcessCodeFile (VirtualPath codeFileVirtualPath) à System.Web.UI.TemplateParser.ProcessMainDirectiveAttribute (String deviceName, String name, String valeur, IDictionary parseData)
(Ceci est d'une demande de /_layouts/Pages/ViewPage.aspx. ViewPage est la page qui a plusieurs autres contrôles, y compris le ArticleView mentionné dans mon exemple original. Il se trouve être le premier fichier échoue - si je retourne à CodeBehind = dans ViewPage, alors ASCX avec CodeFile = échouera de la même manière.) Cela semble être le compilateur de la page qui se plaint parce que la classe héritée codebehind ne peut être trouvée dans aucune DLL chargée, il s'attend à ce qu'il y ait un fichier CS pour faire une compilation à la demande.
Le problème ici est que je ne veux pas déployer de fichiers CS, juste ASPX/ASCX. Ayant lu à travers de nombreux articles comme this great one je suis au courant des différents nouveaux modèles de déploiement, bien que je n'ai jamais utilisé autre chose qu'un projet d'application Web (converti à partir de VS2003, nous étions des adopteurs tardifs de 2005). Au fil des projets VS2005/8, je n'ai jamais eu de problème avec CodeBehind =, jusqu'à ce que ce problème d'Intellisense apparaisse ... même si ça ne m'aide pas dans ce cas. m déploiement sur SharePoint, ce qui introduit un tout nouveau niveau de complexité. Comme je n'ai pas encore déployé de CodeFile, il est très probable qu'il me manque une option que je suis supposé mettre dans VS lors de la construction, afin de forcer une précompilation.J'ai juste besoin d'être capable de déployer, comme je le fais aujourd'hui, comme un ensemble d'ASPX/ASCX avec une seule DLL codebehind. Et cela fonctionne aujourd'hui avec CodeBehind = ... il a juste le problème Intellisense mentionné à l'origine, qui est vraiment ce que je veux réparer :)
Publiera plus comme j'identifie quels fichiers pourraient être pertinents à la question ...
Avez-vous vérifié l'Action Misez sur vos fichiers ? –