通过Web API核心应用调用.Net Framework库时,TypeLoadException无法加载类型'WebConfigurationManager'

时间:2018-07-15 21:20:58

标签: c# asp.net asp.net-core .net-core azure-servicebus-queues

我有一个 Web API 应用程序,是使用.Net Core 2.1 创建的。此Web应用程序中的控制器调用了我也使用.Net Core 2.1开发的业务层类库。到目前为止一切顺利...

.Net核心业务类库引用了我们还开发的常用 .Net Framework 4.6.1类库 。该库主要用于与Azure服务总线队列进行通信。

因此,此常用的.Net Framework类库依次引用并使用了Microsoft .Net Framework程序集 Microsoft.ServiceBus ,如下面的代码行所示。

MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(configValue);

如您所见,上面的代码行位于我们常用的.Net Framework类库中,它将字符串值(即configValue)传递给 Microsoft.ServiceBus < / strong>程序集。

但是,只要上面的代码行执行,我都会收到以下错误消息:

  

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

     

TypeLoadException:无法加载类型   程序集中的“ System.Web.Configuration.WebConfigurationManager”   'System.Web,版本= 4.0.0.0,文化=中性,   PublicKeyToken = b03f5f7f11d50a3a'。

出于兴趣,我在以下代码行中添加了相同的错误:

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

很明显,问题在于System.Web .Net Framework程序集未加载。

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


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

  • 我遇到了类似的问题,之前可以通过安装必需的 NuGet软件包来轻松解决,但这次我找不到这样的软件包。
  • 我们的团队在 .Net Framework 中还有另一个 Web API 应用程序,该应用程序可以正常调用此常用的类库,但这不是一个选择,我们需要保持最新状态。基于.Net Core的Web API应用程序。
  • 我还考虑将常用的库重写为 .Net Standard 2.0 类库,但是考虑到库的大小,这将不是现实的方法,也不一定解决根本问题。

其他可能的解决方案

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,经过调查,我发现我的azure函数应用程序运行时版本为2.0〜,根据documentation版本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

enter image description here