【问题标题】:.NET Core vs .NET Framework - Could not load file or assembly 'System.ServiceModel, Reference assemblies should not be loaded for execution.NET Core vs .NET Framework - 无法加载文件或程序集'System.ServiceModel,不应加载引用程序集以执行
【发布时间】:2021-05-02 14:38:18
【问题描述】:

我有一个 ASP.NET Core 3.1 网络应用程序。

此应用程序需要从第三方 .NET Framework dll 加载和执行一些代码。

不幸的是,第 3 方代码似乎对 System.ServiceModel 有依赖关系(或其他什么?),当我从该 DLL 调用代码时,它会引发以下错误:

无法加载文件或程序集 'System.ServiceModel, Version=4.0.0.0, 文化=中性,PublicKeyToken=b77a5c561934e089'。参考 不应加载程序集以执行。他们只能是 在仅反射加载器上下文中加载。 (0x80131058)

为了在更简单的环境中试用,我创建了 2 个相同的控制台应用程序,它们调用了这个 3rd 方组件

  • .NET Framework - 工作正常,没有抛出错误
  • .NET Core - 抛出同样的错误

这让我相信当我尝试从 .NET Core 调用此第 3 方 .NET Framework 代码时出现问题。

我查看了几个问题,但它们有点不同:
Could not load file or assembly 'System.ServiceModel, Version=4.0.0.0
Could not load file or assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies
Reference assemblies should not be loaded for execution

知道我该怎么做才能让它运行吗?

【问题讨论】:

    标签: c# .net .net-core


    【解决方案1】:

    我们也遇到了这个问题,对我们有用的是确保将 RID(运行时标识符)设置为 win-x64(或 win-x32)。然而,我们的堆栈完全是 .NET Core/Standard

    在您的情况下,通常不可能将 .NET Framework dll 加载到 .NET Core 运行时,因为基础更改不向后兼容。所以即使您能够加载它,您也可能会遇到运行时异常或进程崩溃/失败。

    【讨论】:

    • 谢谢 - 实际上,这是可能的 - 请参阅我的回答 :)
    【解决方案2】:
    • 您无法将 .Net Framework DLL 加载到 .NET Core。您可以在 .NET Core 中使用 .NET 标准 DLL。在其中使用 .NET Standard DLL。通常,第三方应提供 .net 标准版本的代码

    【讨论】:

    • 我不认为这是真的。在同一个项目中,我正在使用另一个 3rd 方 .NET Framework 程序集,并且该程序集没有问题。另请参阅:stackoverflow.com/a/46394435/2892378
    【解决方案3】:

    其实很简单!

    我必须在 .NET 核心应用程序中添加对 System.ServiceModel.Primitives nuget 的引用,它开始正常工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多