Компоненты ASP.NET Core View в разных сборках не найдены
Я пытаюсь загрузить 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 в основном проекте.
var assembly = typeof(Pro.ItemViewComponent).Assembly;
var embeddedFileProvider = new EmbeddedFileProvider(
assembly,
"Pro"
);
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProviders.Add(embeddedFileProvider);
});
Я проследил за многими статьями, некоторыми вопросами и ответами в Stackru, но не нашел никакого решения. Что мне нужно сделать, чтобы поделиться ViewComponent из другой сборки?
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"));
});