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

Mar*_*tyG 5 c# asp.net azure-servicebus-queues .net-core asp.net-core

我有一个使用.Net Core 2.1创建的Web API应用程序.此Web应用程序中的控制器调用我也使用.Net Core 2.1开发的业务层类库.到现在为止还挺好...

对.NET核心业务类库引用了一个常用的.Net框架4.6.1类库,我们还开发了.此库主要用于与Azure服务总线队列通信.

因此,这个常用的.Net Framework类库反过来引用并使用Microsoft .Net Framework Assembly,Microsoft.ServiceBus,如下面的代码行所示.

MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(configValue);
Run Code Online (Sandbox Code Playgroud)

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

但是,每当执行上面的代码行时,我都会收到以下错误:

处理请求时发生未处理的异常.

TypeLoadException:无法从程序集'System.Web,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'加载类型'System.Web.Configuration.WebConfigurationManager'.

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

string configValue = WebConfigurationManager.AppSettings["connectionString"];
Run Code Online (Sandbox Code Playgroud)

显然,问题是未加载System.Web .Net Framework程序集.

但是,鉴于Web应用程序是.Net Core,那么如何使此Web应用程序加载常用库所需的基础.Net Framework程序集?


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

  • 我有一个类似的问题,之前通过安装必要的NuGet包很容易解决,但在这种情况下,我无法找到这样的包.
  • 我们的团队在.Net Framework中有另一个Web API应用程序,它可以毫无问题地调用这个常用的类库,但这不是一个选项,我们需要保持基于.Net Core的当前Web API应用程序.
  • 我还考虑将常用的库重新编写为.Net Standard 2.0类库,但考虑到库的大小,这不是一个现实的方法,也不一定能解决潜在的问题.

其他可行解决方案

  • 从包含configSections section引用程序集System.Web 的.Net Core Web API应用程序中加载Web.config .我尝试了这个,但它没有用,我确定如果我没有应用所有必要的步骤.这是可能的,如果有的话有什么建议吗?
  • 是否有另一种方法可以从.Net Core Web API中加载.Net Framework程序集?
  • 牺牲使用常用库并找到提供类似功能的替代(示例)代码库(即使用Microsoft.ServiceBus与我们的Azure队列一起工作),但这可以是基于.Net Core或.Net Standard.但与上面的.Net标准解决方案类似,我不确定需要复制多少功能,也不确定起点.思考?

谢谢!

Jaw*_*ngh 1

我遇到了同样的问题,经过调查,我发现我的 azure 函数应用程序运行时版本是 2.0 ~ ,根据文档版本 2 是 .NET Core 2 ,函数应用程序版本 1.0 ~ 是 .NET Framework 4.7 。我的 Visual Studio 功能应用程序项目有 .NET Framework 4.6.1 。因此,我只需将函数应用程序版本更改为 ~ 1.0 。

简而言之

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

在此输入图像描述