我们正在开发具有不同功能的多个Intranet网站。我们计划有一个根项目(具有一些基本功能),用户可以从中导航到不同的其他项目。
我们计划所有此类项目都应使用相同的布局_Layout.cshtml
。
为此,我们尝试将_Layout.cshtml
从“side-projects”链接到根项目。我们使用了VS buildin链接方法,如下所述:https://stackoverflow.com/a/19862471/9641435
该文件在没有任何错误消息的情况下链接到路径/Views/Shared/_Layout.cshtml
。但是,如果我们启动其中一个站点项目,则会显示以下错误消息:
处理请求时发生未处理的异常。
InvalidOperationException:布局视图'_Layout'不可能 位于。搜索了以下位置: /Views/Home/_Layout.cshtml /Views/Shared/_Layout.cshtml
Microsoft.AspNetCore.Mvc.Razor.RazorView.GetLayoutPage(ViewContext context,string executionFilePath,string layoutPath)
异常堆栈:
InvalidOperationException:布局视图'_Layout'不可能 位于。搜索了以下位置: /Views/Home/_Layout.cshtml /Views/Shared/_Layout.cshtml
Microsoft.AspNetCore.Mvc.Razor.RazorView.GetLayoutPage(ViewContext context,string executionFilePath,string layoutPath)
Microsoft.AspNetCore.Mvc.Razor.RazorView + d__18.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Mvc.Razor.RazorView + d__14.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor + d__22.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor + d__21.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Mvc.ViewResult + d__26.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker + d__19.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker + d__24.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext 上下文中)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref state next, ref范围范围,ref对象状态,ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker + d__22.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext 上下文中)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref state next, ref范围范围,ref对象状态,ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker + d__17.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker + d__15.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Builder.RouterMiddleware + d__4.MoveNext()
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware + d__7.MoveNext()
我们尝试使用此解决方案修复它:https://stackoverflow.com/a/24079584/9641435但插入该代码并未改变任何内容。
我们正在寻找解决问题的解决方案,或者更好地解决整体问题。
答案 0 :(得分:0)
我发现在构建站点时确实会复制链接的.cshtml文件,但会将它们复制到build bin文件夹中。在我的Startup.cs中,我添加了以下额外区域路由:-
if (Env.IsDevelopment())
{
services.Configure<Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions>(options =>
{
options.AreaViewLocationFormats.Add("/bin/Debug/netcoreapp2.1/Areas/{2}/Views/{1}/{0}.cshtml");
});
}
您的路径可能会有所不同,但是如果您打开解决方案,您应该能够使此答案生效。
使用WebPublishMethod MSDeploy发布到运行IIS的生产Web服务器时,我不需要此步骤。
答案 1 :(得分:0)
我认为您不必让视图复制到输出目录中,而只需将build属性设置为content,从而在csproj文件中产生以下代码:
<ItemGroup>
<Content Include="..\shared\path\to\_Layout.cshtml" Link="Views/Shared/_Layout.cshtml" />
</ItemGroup>