J'ai un site Web ASP.NET 3.5 (jargon studio visuel), mais le site continue de croître et semble plutôt plutôt cow-boy. J'aimerais que cela soit converti en une application Web (espaces de noms et tous).
Est-ce quelque chose qui peut être facilement fait dans Visual Studio? Sinon, existe-t-il d'autres outils capables de créer tous les espaces de noms, etc. automatiquement?
Eh bien, il se trouve que l'option "Convertir en application Web" n'existe PAS pour les "sites Web". L'option "Convertir en application Web" n'existe que pour les "applications Web" !!!!
[mon accentuation]
Alors, voici le marché, faire le conversion, vous devez:
Ajoutez une nouvelle "application Web" à votre solution VS 2008 (Fichier-> Ajouter-> Nouveau Projet-> C # -> Web-> ASP.NET Web Application).
Ensuite, vous copiez tous les fichiers de l’ancien "site Web" dans votre nouveau fichier créé "application Web", et écrasez tous les fichiers créés avec défaut
La prochaine étape est la plus moche, vous devez ajouter "manuellement" les références dans votre "site Web" à la nouvelle "application Web ". Je pensais que le VS 2008 Le jouet PowerCommands ferait cela pour moi comme il le fait copier les références des autres types de projets, mais ce n’est pas le cas. Tu as de le faire vous-même, manuellement, et vous devez être prudent dans cette étape si vous avez plusieurs versions du fichier même Assemblée (comme AJAXToolkit dans mon cas) ou assemblées qui ont les deux GAC et les versions locales ou ainsi.
Continuez à répéter la dernière étape et essayez de créer "l'application Web" . Vous continuerez à recevoir des erreurs du type " '...." est un espace de noms inconnu. Vous manque-t-il une référence à Assembly? ". Faire Assurez-vous que vous n'en avez aucune, sauf le ceux où "...." est remplacé par le ID des contrôles serveur que vous utilisez. Dans En d'autres termes, continuez à ajouter des références et construire le projet jusqu’à ce que seulement les erreurs qui existent à cause de manquant .DESIGNER.CS ou .DESIGNER.VB des dossiers.
Ensuite, accédez au nœud de projet racine "application Web" dans VS Solution 2008 Explorer, et à droite cliquez dessus, alors vous trouverez le option "Convertir en application Web" . Ce que fait cette option est en réalité apporter de petites modifications à la "@Page" et les directives "@Control" des pages et contrôles, et la création de la requise Fichiers .DESIGNER.CS ou .DESIGNER.VB.
Essayez de construire à nouveau "l'application Web". Si vous obtenez des erreurs, voyez quoi les références peuvent être manquantes et/ou disparaître cliquez sur "Convertir en application Web" encore. Parfois, s'il y a une erreur autres que ceux causés par les disparus Fichiers DESIGNER, pas tous les fichiers les pages/contrôles auront ces Fichiers DESIGNER créés pour eux . Correction du problème non-DESIGNER et en cliquant sur "Convertir en application Web" encore une fois devrait faire le travail pour cela.
Une fois que vous avez terminé avec succès la construction de VS, vous devriez être prêt à partir . Commencez à tester votre application Web . Vous pouvez également cliquer avec le bouton droit de la souris sur Noeud de projet racine "application Web" dans VS 2008 Solution Explorer et cliquez sur "Propriétés" puis allez dans l'onglet "Web" définir "l'application Web" sur dossier virtuel dans IIS (vous pouvez créer nouveau répertoire virtuel à partir de là dans VS). Si vous souhaitez utiliser IIS répertoire virtuel que l'ancien "site Web" utilisé, vous devez supprimer celle de IIS en premier.
Mise à jour: lors du test de vos pages, accordez la plus grande attention aux classes dans Dossier "App_Code", en particulier ceux avec NO NAMESPACE. Ceux-ci peuvent être un grand piège. Nous avons eu un problème avec deux méthode d'extension surcharge dans le même classe statique qui n'avait pas d'espace de nom, un étend DateTime? (Nullable) et appelle une autre surcharge que étend DateTime lui-même. Appeler le autre surcharge en tant que méthode d'extension passé VS 2008 compilation et nous a donné une erreur de compilation UNIQUEMENT EN RUNTIME (Avec IIS). Changer l'appel en autre surcharge d'appeler comme méthode d'extension pour l'appeler en tant que méthode statique normale (ne changeant que l'appel dans la même classe, les appels provenant de les autres classes restaient des appels d'extension à la méthode ) ont résolu celui-ci, mais. Clairement, ce n’est pas aussi sûr qu’il l’a utilisé être dans VS 2005. Surtout avec classes sans espaces de noms.
Update2: Lors de la conversion, VS 2008 a renommé votre "Code_App" en "Old_App_Code". Ce nouveau nom sonne moche, mais ne le renommez pas. Dans le modèle "application Web", tout le code sera dans une assemblée. En exécution, le serveur Web ne sait pas quel site Web type de projet que vous utilisez. Cela fait prendre tout le code dans le dossier "App_Code" et créer une nouvelle assemblée pour cela. Ce manière, si vous avez le code dans le dossier nommé "App_Code", vous obtiendrez RUNTIME erreurs de compilation que les mêmes types existent dans deux assemblées, l'une créé par VS et celui créé par IIS/Serveur de développement ASP.NET. À éviter cela. laissez le "Old_App_Code" avec le même nom, ou le renommer TOUT EXCEPT: "App_Code". Ne pas placez n'importe quel code dans un tel "App_Code" dossier et de préférence n'ont pas un dossier avec un tel nom dans votre "application web " du tout.
Je le sais depuis avant mais je l'ai oublié maintenant que je n'ai pas utilisé le modèle "site web" pour longtemps :(.
Si votre application Web se développe, il est préférable de la scinder en plusieurs projets. La conversion d'un projet de site Web en projet d'application Web ne vous aidera pas beaucoup.
Si vous rencontrez des problèmes pour la génération de votre nouveau projet d'application Web, vérifiez les propriétés du fichier dans Visual Studio de toutes les classes 'd'assistance'. Pour un projet en cours de conversion, l'action de génération a été définie sur Contenu alors qu'elle aurait dû être compilée.
Je faisais face aux mêmes problèmes au début. Après avoir suivi le manuel de Wrox Professional ASP.NET 4.0, j’ai trouvé la solution suivante pour mon cas.
J'ai d'abord créé une nouvelle application Web. Copié tous les fichiers du site Web dans le dossier de l'application Web. Cliquez avec le bouton droit sur l'application, puis cliquez sur converger vers une application Web.
Vous vous demandez peut-être pourquoi vous devez convertir une application Web en une application Web. La réponse est que, lorsque vous créez un site Web, il vous suffit de coder le fichier .cs le cas échéant. Une application Web, mais déclare toutefois .design.cs (ou .vb) et un fichier .cs pour le code et section de conception automatiquement.
NEXT: supprimez toutes les références manuelles, telles que l'attribut "Inherits" de la directive PAGE, aux autres fichiers de votre site Web, car les espaces de noms SERONT pris en charge pour référencer les classes de manière centrale.
J'ai également rencontré un problème, car je n'avais pas inclus les dossiers OBJ et BIN dans mon projet . Si vous pensez qu'il vous manque des dossiers BIN et OBJ, cliquez simplement sur l'icône "Afficher tous les fichiers" dans l'Explorateur de solutions, puis à droite. cliquez sur les dossiers manquants et ajoutez au projet. (pour s'assurer qu'ils compilent avec le projet.)
UPDATE: Comme le souligne @deadlychambers dans les commentaires: vous pouvez effectuer une recherche partout en faisant un "Ctrl + Maj + F", puis en recherchant Inherits="(.*?)"
. Cela trouvera toutes les occurrences et vous fera probablement gagner du temps!
Créer une nouvelle application Web dans VS 2010.
1. En utilisant Windows Explorer, copiez tous vos fichiers dans votre dossier de projet.
2. Dans VS 2010 solution Explorer, affichez tous les fichiers.
3. Sélectionnez les fichiers et les dossiers - cliquez avec le bouton droit de la souris sur inclure dans le projet.
4. Cliquez avec le bouton droit de la souris sur l'explorateur de solutions de projet et sélectionnez Convertir en application Web.
Il existe de nombreuses petites différences, telles que le dossier App_Code sera renommé old_app_code - cela ne provoque étonnamment aucune erreur. Le TypeName sur vos sources de données d'objet et les héritages sur la balise @Page peuvent nécessiter le [NomProjet]. préfixe ajouté globalement. Par exemple, si votre nom de type était "BusinessLogic.OrderManager" et que votre nom de projet était InventorySystem, vous devrez le remplacer par InventorySystem.BusinessLogic.OrderManager. De plus, quelques changements d'affichage, tels que les validateurs de champs requis ne sont plus définis par défaut en police rouge, mais par défaut en noir.
J'ai maintenant migré avec succès un projet de site Web vers une application Web et il reste quelques pièges à ne pas manquer.
Avoir ReSharper à votre disposition aide beaucoup à refactoriser les fichiers aspx.
public partial class FolderName_Projectname : Page
Si nécessaire, renommez tous les fichiers à l'aide de Resharper ou manuellement . Si vous rencontrez plusieurs erreurs telles que "There is already a member Page_Load() defined"
, il est probable noms de classes incorrects et duplicationRemplacez CodeFile
dans toutes les pages aspx par Codebehind
et faites particulièrement attention aux fichiers de votre sous-dossier. Assurez-vous que Inhertis=""
ne contient pas le chemin relatif. Vos espaces de noms s'occupent de tout. Donc, le format correct est Inherits="Namespace.classname"
. Si votre classe a un espace de noms NaSpa et un nom de fichier foo.cs, ce serait Inherits="NaSpa.foo"
Après avoir préparé tous vos fichiers (n'oubliez pas vos pages maîtres), exécutez "Convertir en application Web". Si vous rencontrez des erreurs par la suite, rincez et répétez. Si vous rencontrez des erreurs du type "Impossible de trouver TextBoxName s'il vous manque une référence", assurez-vous de ne pas oublier de nettoyer vos pages aspx. Un bon indicateur est de vérifier les fichiers de concepteur générés automatiquement. Si TextBoxName
n'y figure pas, la conversion n'a pas complètement abouti.
l'espace de nom ASP par défaut ne semble plus fonctionner. Donc, je n'arrive pas à appeler mes pages User Controls.ascx de l'extérieur de la page. Leur donner un espace de noms et changer le paramètre par défaut de ASP en mon espace de noms semblait fonctionner.