Представления, которые живут в основном веб-приложении, всегда будут переопределять представления из библиотеки классов.Но представления, безусловно, можно использовать из библиотеки классов, отличной от контроллеров.
Для того чтобы открыть представления в библиотеке классов представлений, ваша библиотека классов представлений должна использовать sdk Microsoft.NET.Sdk.Razor,и он должен иметь прямую зависимость от Microsoft.AspNetCore.Mvc
. Без этого он не будет видеть представления в вашей библиотеке классов.
И основное веб-приложение должно ссылаться на библиотеку классов.
Вам не нужна логика расширения местоположения вида.
ОБНОВЛЕНИЕ:
Ваш проект представления csproj должен выглядеть примерно так:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="path-to-yourview-models-project.csproj" />
--maybe other project refs here
</ItemGroup>
</Project>
Примечаниечто Microsoft.NET.Sdk.Razor не является зависимостью пакета.
Также представлениям в вашей библиотеке классов нужны те же соглашения о структуре папок, как если бы они были в основном веб-приложении.
Views
Home
.cshtml files
Shared
.cshtml files
_ViewImports.cshtml
вы можете поместить их в папки, соответствующие имени контроллера без суффикса «Controller», или вы можете поместить их все в общий