Частичные представления в библиотеке классов Razor не найдены

У меня есть простой RCL со следующей структурой:

/Pages /Shared/ _Footer.cshtml

Содержание очень простое:

<h3>  _Footer.cshtml partial view.</h3>

У меня также есть проект веб-приложения ASP.NET Core с такой же структурой папок:

/Pages _ViewImports.cshtml -ViewStart.cshtml /Shared _Layout.cshtml

Где-то в файле макета я делаю ссылку на частичное представление:

<partial name="_Footer" />

Вот в чем проблема:

  • Если я добавлю в веб-приложение ссылку на проект RCL, будет найдено частичное представление и страницы будут отображаться нормально.
  • Если я сделаю пакет Nuget из RCL, добавлю его в локальный источник Nuget и добавлю ссылку на пакет, частичное представление не будет найдено.

The partial view '_Footer' was not found. The following locations were searched: /Pages/_Footer.cshtml /Pages/Shared/_Footer.cshtml /Views/Shared/_Footer.cshtml

В чем может быть разница между добавлением ссылки на проект и ссылки на Nuget? Я проверил, что пакет Nuget содержит сборки по умолчанию и представления Class Lib.


person Amir Keibi    schedule 21.09.2018    source источник
comment
Есть ли прогресс по этому вопросу? Я наблюдаю такое же поведение. Ссылка на проект библиотеки классов Razor работает, и маршрут страницы найден, при использовании пакета NuGet того же проекта маршруты страниц не обнаруживаются. Надеемся на любой ответ здесь.   -  person TsugaSoft    schedule 17.10.2018
comment
К сожалению нет.   -  person Amir Keibi    schedule 17.10.2018
comment
Я нашел потенциальный ответ. Возможно, ваш пакет NuGet был кэширован. Вы можете попробовать запустить следующее из командной строки: dotnet nuget locals all --clear У меня есть образец решения, работающий по следующему URL-адресу, я могу отключить его через несколько месяцев, поэтому, надеюсь, это сработает помощь в краткосрочной перспективе. ссылка   -  person TsugaSoft    schedule 18.10.2018


Ответы (4)


Я обнаружил, что это работает, если вместо этого вы используете dotnet pack из nuget pack. Примечание для dotnet pack информация о пакете теперь считывается из csproj вместо файла спецификации nuget.

person Michael    schedule 22.08.2019

У меня была такая же проблема, решил написать полный путь из области библиотеки, например:

В библиотеке у меня есть:

Области / Нижний колонтитул / Страницы / _footer.cshtml

в моем UI Proyect я назвал это так: <partial name="~/Areas/Footer/Pages/_footer.cshtml" model="My Model instance"/>

Я надеюсь это поможет тебе

person Jose luis Flórez    schedule 03.12.2018

Согласно документам (https://docs.microsoft.com/en-us/aspnet/core/razor-pages/sdk), я думаю, вы можете использовать IncludeRazorContentInPack для включения ваших файлов .cshtml в пакет NuGet (по умолчанию false).

person crgolden    schedule 27.02.2019

В моем случае я даже не смог заставить его работать в сценарии, в котором оператор сказал, что он действительно работает:

Если я добавлю в веб-приложение ссылку на проект RCL, будет найдено частичное представление и страницы будут отображаться нормально.

Я как раз получал стандартное сообщение об ошибке, что частичное представление не найдено (даже если искомые пути были правильными).

После некоторой тряски я решил эту проблему, добавив следующий блок xml в оба файла .csproj:

  1. RCL: например, RazorUIClassLib.csproj
  2. Веб-приложение: например, WebApp1.csproj
<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
person infografnet    schedule 28.01.2020