Не удается найти ASP.NET Core ViewComponents в другой сборке

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

InvalidOperationException: не удалось найти компонент представления с именем «Pro.ItemViewComponent». Компонент представления должен быть общедоступным неабстрактным классом, не содержать каких-либо универсальных параметров и либо быть украшен атрибутом «ViewComponentAttribute», либо иметь имя класса, заканчивающееся суффиксом «ViewComponent». Компонент представления не должен быть украшен 'NonViewComponentAttribute'.

Library.csproj

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None 
Remove="Views\Shared\Components\ContainerViewComponent\Default.cshtml"/>
<None Remove="Views\Shared\Components\ItemViewComponent\Default.cshtml" />
<None Remove="Views\Shared\_ViewImports.cshtml" />
</ItemGroup>

<ItemGroup>
<Content 
Include="Views\Shared\Components\ContainerViewComponent\Default.cshtml">
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  <Pack>$(IncludeRazorContentInPack)</Pack>
</Content>
<Content Include="Views\Shared\Components\ItemViewComponent\Default.cshtml">
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  <Pack>$(IncludeRazorContentInPack)</Pack>
</Content>
<Content Include="Views\Shared\_ViewImports.cshtml">
  <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  <Pack>$(IncludeRazorContentInPack)</Pack>
</Content>
</ItemGroup>
<ItemGroup>
    <EmbeddedResource Include="Views/**/*.cshtml" />
</ItemGroup>
<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1" />
</ItemGroup>

Startup.cs in main project.

var assembly = typeof(Pro.ItemViewComponent).Assembly;
var embeddedFileProvider = new EmbeddedFileProvider(
    assembly,
    "Pro"
);

services.Configure<RazorViewEngineOptions>(options =>
{
    options.FileProviders.Add(embeddedFileProvider);
});

Я просмотрел множество статей и несколько вопросов и ответов в StackOverflow, но не нашел решения. Что мне делать, чтобы поделиться ViewComponent из другой сборки?


person Sabir Hossain    schedule 12.09.2018    source источник
comment
Взгляните на части приложений. в ASP.NET Core.   -  person Kirk Larkin    schedule 12.09.2018


Ответы (1)


Проблема была очень проста в конфигурации в Startup.cs, мне пришлось добавить services.AddMvc().AddApplicationPart(myAssembly); полная конфигурация ниже.

var myAssembly = typeof(MyViewComponent).Assembly;

services.AddMvc().AddApplicationPart(myAssembly);

services.Configure<RazorViewEngineOptions>(options =>
 {
       options.FileProviders.Add(new EmbeddedFileProvider(myAssembly, "ComponentLib"));          
 });
person Sabir Hossain    schedule 12.09.2018