Совместное использование одного и того же _layout.cshtml в разных проектах одного решения с ASP.NET Core 2.0 MVC - PullRequest
0 голосов
/ 17 мая 2018

Мы разрабатываем несколько интранет-сайтов с различными функциями.Мы планируем создать корневой проект (с некоторыми основными функциями), из которого пользователь может перейти к другим проектам.Мы планируем, что все проекты такого рода должны использовать один и тот же формат _Layout.cshtml.Для этого мы попытались связать _Layout.cshtml из «побочных проектов» с корневым проектом.Мы использовали метод компоновки 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, строка executingFilePath, string layoutPath)1013 *

Стек исключений:

InvalidOperationException: Не удалось найти представление макета '_Layout'.Были найдены следующие местоположения: /Views/Home/_Layout.cshtml /Views/Shared/_Layout.cshtml

Microsoft.AspNetCore.Mvc.Razor.RazorView.GetLayoutPage (контекст ViewContext, строка executingFilePath, string layoutPath)1021 *

Microsoft.AspNetCore.Mvc.Razor.RazorView + d__18.MoveNext ()

System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()

System.Runtime.CompilerServices.TaskA.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 ()

Exception.Exception)

System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача)

Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor + d__21.MoveNext ()

System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()

System.Runtime.CompilerServices.TuGuND(Задача)

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.ExceptionSerp.

System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача)

Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker + d__24.MoveNext ()

* 1060.Exception.Throw ()

Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow (ResultExecutконтекст edContext)

Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next (ref State следующий, ref Область видимости, ref object object, ref bool isCompleted)

Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker + d__22.MoveNext ()

System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()

Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow (контекст ResourceExecutedContext * * 10 *)1072 * Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next (ссылка «Состояние следующее», «Область действия», «Состояние объекта», «bool isCompleted»)

Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker + d__17.MoveNext ()

System.Runtime..MoveNext ()

System.Runtime.ExceptionServices.ExceptionDispatchInfo.Builder.RouterMiddleware + d__4.MoveNext ()

System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()

System.Runtime.CompilerServices.TaskAwaiter.Handle * NonSuccessAnd91* Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware + d__7.MoveNext ()

Мы пытались исправить это с помощью этого решения: https://stackoverflow.com/a/24079584/9641435, но вставка этого кода ничего не изменила.

Мы ищем решение, чтобы решить описанную проблему или, возможно, лучшеплотва для решения общей проблемы.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Я думаю, вам не нужно позволять копировать представление в выходной каталог, а просто установить свойство build в content, что приведет к следующему коду в вашем файле csproj:

<ItemGroup> <Content Include="..\shared\path\to\_Layout.cshtml" Link="Views/Shared/_Layout.cshtml" /> </ItemGroup>

0 голосов
/ 12 ноября 2018

Я обнаружил, что связанные файлы .cshtml копируются при сборке сайта, но они копируются в папку сборки 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"); }); }

ваш путь может отличаться, но если вы откроете решение, вы сможете адаптировать этот ответ к работе.

Этот шаг мне не понадобился при публикации на рабочем веб-сервере, на котором запущен IIS с использованием WebPublishMethod MSDeploy.

...