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 ?
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
},
j'ai ajouter dans le projet.json:
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
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é:
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:
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