Comment résoudre une exception "view not found" dans asp.net projet de base des mvc

j'essaie de créer un ASP.NET application de test MVC de base tournant sur OSX en utilisant le code VS. Je reçois une exception 'view not found' lors de l'accès à la page D'accueil/index par défaut (ou toute autre vue que j'ai essayé).

C'est la configuration de Démarrage

    public void Configure(IApplicationBuilder app) {

        // use for development
        app.UseDeveloperExceptionPage();
        app.UseDefaultFiles();
        app.UseStaticFiles();

        app.UseMvc( routes => {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}"
            );
        });
    }

Et j'ai la vue définie dans Views/Home/index.cshtml, et j'ai les paquets suivants inclus dans le projet.json

"dependencies": {
"Microsoft.NETCore.App": {
  "version": "1.0.0-rc2-3002702",
  "type": "platform"
},
"Microsoft.AspNetCore.Razor.Tools" : "1.0.0-preview1-final",
"Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Routing": "1.0.0-rc2-final"
},

et enfin, c'est l'exception que j'obtiens.

System.InvalidOperationException: The view 'Index' was not found. The following locations were searched:
    /Views/Home/Index.cshtml
    /Views/Shared/Index.cshtml
    at Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable`1 originalLocations)
    at Microsoft.AspNetCore.Mvc.ViewResult.<ExecuteResultAsync>d__26.MoveNext()
    --- End of stack trace from previous location where exception was thrown --- ...

toute suggestion de ce que je peut-être manquant ?

17
demandé sur JTew 2016-05-30 18:16:49

7 réponses

j'ai trouvé cette pièce manquante. J'ai fini par créer un ASP.NET projet de base dans VS2015 et ensuite comparer pour les différences. Il s'avère que j'ai été absent .UseContentRoot(Directory.GetCurrentDirectory())WebHostBuilder dans le main.

après ajout de ceci:

public static void Main(string[] args)
{
    new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .Build()
        .Run();
}

j'ai ensuite obtenu une exception en ce qui concerne l'absence de preserveCompilationContext. Une fois ajouté dans le projet.json mon point de vue montre correct.

"buildOptions": {
    "preserveCompilationContext": true,
    "emitEntryPoint": true
},
10
répondu Jesper Kristiansen 2016-08-11 15:59:07

j'ai ajouter dans le projet.json:

"publishOptions": {
    "include": [
        "wwwroot",
        "**/*.cshtml",
        "appsettings.json",
        "web.config"
    ]
},
4
répondu Alexandre Swioklo 2016-12-19 23:57:20

j'ai eu ce même problème lors de la construction d'une instance de serveur D'identité, tout a bien fonctionné si J'ai lancé le projet depuis Visual Studio mais après avoir édité le projet et exécuté avec le dotnet commande j'ai eu l'erreur "View not found" quand le serveur D'identité a essayé de servir la vue de connexion. J'avais déjà vérifié tout le reste, mais ça ne marchait pas. J'ai finalement trouvé que le problème était avec la façon dont je dirigeais le dotnet la commande. Je courais de la mère dossier, un niveau au-dessus de L'instance de mon serveur D'identité et cela a affecté le chemin racine du contenu, par exemple, en exécutant ceci

dotnet myWebFolder/MyIdentityServer.dll

m'a donné la sortie suivante quand le serveur D'identité a commencé: enter image description here

donc, le chemin complet de ma dll dans ce cas est C:\inetpub\aspnetcore\myWebFolder\MyIdentityServer.dll et moi avons couru le dotnet commande de la C:\inetpub\aspnetcore \ folder.

pour obtenir le bon contenu root je devais m'assurer que je ran dotnet commande depuis le même dossier où se trouve la dll, comme dans 'dotnet MyIdentityServer.DLL.` Ce changement m'a donné ce résultat:

enter image description here

maintenant mon chemin de racine de contenu est correct et le serveur D'identité trouve les vues de connexion à C:\inetpub\aspnetcore\myWebFolder\Views\Account\Login.cshtml

1
répondu AK3800 2017-03-22 14:22:44

réponse à @LukaszDev (Je ne pense pas pouvoir joindre des images à un commentaire) De mon point de vue est