我正在尝试使用VS Code创建在OSX上运行的ASP.NET Core MVC测试应用程序.我在访问默认的Home/index(或我尝试过的任何其他视图)时遇到"查找未找到"异常.
这是启动配置
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}"
);
});
}
Run Code Online (Sandbox Code Playgroud)
我已经定义了视图Views/Home/index.cshtml,并且我在project.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"
},
Run Code Online (Sandbox Code Playgroud)
最后,这是我得到的例外.
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 --- ...
Run Code Online (Sandbox Code Playgroud)
对我可能缺少什么的任何建议?
Jes*_*sen 13
我找到了这件丢失的作品.我最终在VS2015中创建了一个ASP.NET Core项目,然后比较差异.原来我是缺少.UseContentRoot(Directory.GetCurrentDirectory())来自WebHostBuilder主.
添加后:
public static void Main(string[] args)
{
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build()
.Run();
}
Run Code Online (Sandbox Code Playgroud)
然后我得到了关于失踪的例外preserveCompilationContext.在project.json中添加后,我的视图显示正确.
"buildOptions": {
"preserveCompilationContext": true,
"emitEntryPoint": true
},
Run Code Online (Sandbox Code Playgroud)
Nir*_*edi 13
检查您的 .csproj 文件。确保您的文件没有像这样列出:
<ItemGroup>
<Content Remove="Views\Extractor\Insert.cshtml" />
<Content Remove="Views\_ViewImports.cshtml" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
如果它像上面一样列出,请删除您需要的那些。有时,当我们右键单击并将构建设置更改为编译时会发生这种情况。
小智 12
我在 ASP.Net Core MVC (.Net 6) 中遇到了同样的问题。我只是将 Visual Studio 2022 更新到最新版本 17.1.0 并解决了该错误。
Joh*_*Fun 10
我刚刚从 .net core 2.2 升级到 3。我发现了两种解决方法:
AddRazorRuntimeCompilation()在配置 mvc 时调用,例如:
services.AddControllersWithViews()
.AddRazorRuntimeCompilation(...);
Run Code Online (Sandbox Code Playgroud)
更多信息:https : //docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#opt-in-to-runtime-compilation
或者从 .csproj 中删除以下几行:
<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>false</RazorCompileOnPublish>
Run Code Online (Sandbox Code Playgroud)
Moh*_*d S 10
我的项目的解决方案是通过
1- 添加 AddRazorRuntimeCompilation() 例如
services.AddControllersWithViews().AddRazorRuntimeCompilation();到StartUp ConfigureServices.
2-并保留这个 <RazorCompileOnBuild>false</RazorCompileOnBuild>
在.csproj。然后构建项目。
更新
确保您已将此 NuGet 包添加到您的项目中:
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
小智 8
在我的例子中,构建操作以某种方式更改为嵌入式资源,该资源未包含在已发布的文件中.
改变Embedded resource以Content解决我的问题.
如果您要将项目从控制台应用程序移植到 Web 应用程序,则需要更改文件中的这一.csproj行
从:
<Project Sdk="Microsoft.NET.Sdk">
Run Code Online (Sandbox Code Playgroud)
到:
<Project Sdk="Microsoft.NET.Sdk.Web">
Run Code Online (Sandbox Code Playgroud)
我必须在 project.json 中添加:
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25298 次 |
| 最近记录: |