web-dev-qa-db-fra.com

"ASP.global_asax n'existe pas dans l'espace de noms ASP"

J'ai créé un fichier RazorFunctions.cshtml sur App_Code

@functions {
    public static string GetActiveClassIf(string controllerName, string actionName = null)
    {
        var routeData = @HttpContext.Current.Request.RequestContext.RouteData;
        string currentController = routeData.Values["controller"].ToString();
        string currentAction = routeData.Values["action"].ToString();
        return controllerName == currentController &&
            (String.IsNullOrEmpty(actionName) || currentAction == actionName) ? "active" : "";
    }
}

et quand je compile, cela me donne 2 erreurs (la compilation a du succès et le site fonctionne sans problème) mais les erreurs sont gênantes.

Le fichier RazorFunctions.cshtml correspond au contenu (la compilation a été essayée mais ne fonctionne pas avec les fichiers cshtml bien sûr)

Global.asax.cs est:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        ModelMetadataConfig.RegisterModelMetadata();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>());
        //Database.SetInitializer(new DropCreateDatabaseAlways<ApplicationDbContext>());
    }
}

et

<%@ Application Codebehind="Global.asax.cs" Inherits="Bouron.Web.MvcApplication" Language="C#" %>

C'est la première fois que j'utilise App_Code, donc je ne sais pas quoi faire d'autre. Toutes les recherches renvoient des résultats ASP.NET 1-2. Elles sont obsolètes et le rasoir n'existe même pas. Par conséquent, je ne sais pas comment Je résous ceci.

J'utilise Visual Studio 2015 (juste au cas où ça compte)

49
Bart Calixto

Après une enquête plus approfondie, j'ai constaté qu'il s'agissait d'un problème connu.

source: https://support.Microsoft.com/en-us/kb/3025133

ASP.NET et développement Web

  • Lorsque vous créez un WAP Web Forms 4.5 et ouvrez une page Web Form, vous recevez les erreurs suivantes dans la fenêtre Liste des erreurs:

  • Le projet se déroulera sans aucun problème. Erreur CS0234 Le nom de type ou d'espace de noms 'global_asax' n'existe pas dans l'espace de noms 'ASP' (il manque une référence d'assembly?) Erreur CS0234 Le nom du type ou d'espace de noms 'Linq' n'existe pas dans l'espace de noms 'Système' (Il vous manque une référence Assembly?) Supposons que vous utilisiez les nouvelles fonctionnalités de langage pour C # et VB dans Visual Studio 2015 RC. Vous recevez une erreur d'exécution lorsque vous utilisez C # ou VB dans une page de formulaire Web ou dans Razor Views.

Pour contourner ce problème, installez le package Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet. Ce package substituera le fournisseur basé sur Roslyn aux fournisseurs CodeDom intégrés pour ASP.NET.

44
Bart Calixto

J'ai eu le même problème. 

J'ai édité manuellement le fichier généré file.cshtml.72cecc2a.cs (il était à AppData\Local\Temp\Temporary ASP.NET Files\root) et changé ASP.global_asax en System.Web.HttpApplication et l'erreur a disparu.

C'est le code généré:

protected static ASP.global_asax ApplicationInstance {
    get {
        return ((ASP.global_asax)(Context.ApplicationInstance));
    }
}

Je l'ai changé pour:

protected static System.Web.HttpApplication ApplicationInstance {
    get {
        return ((System.Web.HttpApplication)(Context.ApplicationInstance));
    }
}

Je ne sais pas pourquoi cela se passe cependant.

19
Orlando William

J'ai constaté que si j'ai les fichiers dans App_Code ouverts dans Visual Studio 2015 lorsque j'exécute la génération, je ne reçois pas les erreurs. Dès que je ferme les fichiers, les erreurs réapparaissent.

14
Lance Fisher

Après avoir essayé diverses solutions proposées ici, il s'est avéré qu'il suffisait de quitter Visual Studio 2015, puis de le redémarrer pour que la solution/projet puisse à nouveau être compilée.

3
starlocke

Deux choses que j'ai faites pour résoudre ce problème ont été de ré-cibler le framework, puis de le changer (en utilisant 4.5.1, il a changé pour 4.5 et retour)

Après cela, j’ai eu beaucoup d’erreur avec T4MVC que j’utilisais aussi, je l’ai mise à niveau vers la version la plus récente, mais j’ai pu constater que, dans le contrôle de source, T4MVC était installé dans le cadre du framework 4.5. cadre cible, qui a été changé en 4.5.1

Après cela, tout a fonctionné. Je n'ai pas vérifié si vous n'aviez besoin que de répondre à cette seconde partie de la réponse, mais j'essaierais d'abord.

1
Jim Wolff

J'ai installé Microsoft.CodeDom.Providers.DotNetCompilerPlatform pour mon projet Web, puis supprimé le package. L'erreur est partie.

0
spine4iller

CLIQUEZ JUSTEMENT SUR VOTRE PROJET DE SOLUTION ET CLIQUEZ SUR PROPRE. J'AI FAIT CELA ET IL DID TRAVAILLE POUR MOI. Je partage cela parce que qui sait si cela aide quelqu'un d'autre comme ça m'aide. 

0
Af'faq

La façon dont j'ai résolu cette erreur a été de déplacer mon formulaire de code Global.asax.cs dans Startup.cs et de supprimer Global.asax afin qu'il n'y ait pas de fichiers codebehind dans mon projet. Voir cette question pour plus d'informations.

0
rfoster