Kentico Portal 中的 Kentico Kontent DeliveryClient.Build 无法加载文件或程序集 Microsoft.Extensions.DependencyInjection

Kentico Kontent DeliveryClient.Build in Kentico Portal could not load file or assembly Microsoft.Extensions.DependencyInjection

我试图在没有依赖注入的 Kentico Portal 项目中使用他们的 DeliveryClient 调用 Kentico Kontent。此项目想迁移到 Kontent,但希望在迁移前使用 Kontent 实现现有项目中的新功能。

安装 Kontent Delivery SDK 后,这是我的代码

var clientTest = DeliveryClientBuilder.WithProjectId("MyProjectId").Build();

我收到运行时错误

System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.Extensions.DependencyInjection, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The system cannot find the file specified.'

显然,这个项目没有依赖项注入,我听说在门户项目中设置它即使不是不可能也很困难。所以我决定按照 Kentico 的 blog post

中的概述新建我自己的交付客户端
var test = new DeliveryClient(options);

但是DeliveryClient被标记为内部:'DeliveryClient' is inaccessible due to its protection level

我该如何进行?

详情

虽然 Kentico.Kontent.Delivery 12.* 目标 netstandard2.0 这意味着 should be compatible with .NET Framework 4.6.1, there is evidence 此设置可能会导致问题。在尝试其他任何事情之前,我会推荐一些东西:

  1. 升级到 .NET 4.8(或至少到 4.7.2)
  2. 通过添加以下内容在您的项目中启用 Automatic Binding Redirection
<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

无论您如何 instantiate/register DeliveryClient (DeliveryClientBuilder services.AddDeliveryClient()),SDK 始终在内部使用 Microsoft.Extensions.DependencyInjection,因此没有解决方法。您将需要解决程序集绑定问题。

实际问题要愚蠢得多。我已经在另一个项目中安装了 Kontent Delivery Client nuget sdk,并且只在这个项目中引用了它。为这个项目安装它解决了这个问题。我现在可以毫无错误地调用构建器了。