TypeLoadException 当通过 Web API Core 应用程序调用 .Net Framework 库时,无法加载类型 'WebConfigurationManager'。

8
我有一个使用 .Net Core 2.1 创建的 Web API 应用程序。该 Web 应用程序的控制器调用了一个业务层类库,该类库也是我使用 .Net Core 2.1 开发的。目前为止一切顺利。
.Net Core 业务类库引用了一个常用的 .Net Framework 4.6.1 类库,我们也开发了这个类库。该类库主要用于与 Azure 服务总线队列通信。
因此,这个常用的 .Net Framework 类库反过来又引用并使用了 Microsoft .Net Framework 组件 Microsoft.ServiceBus,如下面的代码所示:
MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(configValue);

正如您在上面看到的代码行,在我们常用的.NET Framework类库中,将字符串值(即configValue)传递给存在于Microsoft.ServiceBus程序集中的静态方法。

然而,每当执行以上代码时,我都会收到以下错误:

处理请求时发生未处理异常。

TypeLoadException: 无法从程序集中加载类型“System.Web.Configuration.WebConfigurationManager”,程序集名称为“System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。

出于兴趣,我添加了以下代码行,但是我得到了相同的错误:

string configValue = WebConfigurationManager.AppSettings["connectionString"];

很明显,问题在于未加载 System.Web .Net Framework 组件。

然而,由于 Web 应用程序是 .Net Core,那么我该如何使这个 Web 应用程序加载常用库所需的底层 .Net Framework 组件呢?


已考虑的解决方案 - (不适用)

  • 我之前遇到过类似的问题,当时通过安装必要的NuGet 包轻松解决了问题,但这一次我没有找到这样的包。
  • 我们团队有另一个基于.Net FrameworkWeb API应用程序,可以无问题地调用这个常用类库,但这不是一个选项,我们需要保持当前的基于 .Net Core 的 Web API 应用程序。
  • 我还考虑将常用库重写为 .Net Standard 2.0 类库,但考虑到库的大小,这不是一个现实的方法,而且这不一定能解决根本问题。

其他可能的解决方案

  • 从 .Net Core Web API 应用程序内部加载一个包含 configSections section 引用 System.Web 组件的 Web.config。我尝试过这个方法,但它没有起作用,我确定我没有应用所有必要的步骤。这个方法可行吗?如果可以,有什么建议?
  • 是否有其他方式可以从 .Net Core Web API 内部加载 .Net Framework 组件?
  • 放弃使用常用库,并找到一个提供类似功能(即利用 Microsoft.ServiceBus 与我们的 Azure 队列一起工作)但基于 .Net Core 或 .Net Standard 的替代(示例)代码库。但和上面的 .Net Standard 解决方案一样,我不确定需要复制多少功能,也不确定从哪里开始。有什么想法吗?

谢谢!

1个回答

1

我遇到了同样的问题,经过调查发现我的Azure函数应用运行时版本是2.0,根据文档,版本2是.NET Core 2,而函数应用版本1.0~是.NET Framework 4.7。我的Visual Studio函数应用项目使用的是.NET Framework 4.6.1。所以,我只需要将函数应用版本更改为1.0即可。

简而言之

  • 如果您的Visual Studio函数应用程序在.NET Core 2.0中,则仅使用函数应用程序版本2.0
  • 如果您的Visual Studio函数应用程序在.NET Framework 4.7中,则仅使用函数应用程序版本1.0

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接