C# 从.Net framework应用程序中的.Net核心库调用方法

C# 从.Net framework应用程序中的.Net核心库调用方法,c#,.net,.net-standard-2.0,.net-core-3.1,C#,.net,.net Standard 2.0,.net Core 3.1,使用VisualStudio2019 有3个组件: .Net Framework 4.7.2-主应用程序 .Net标准2.0-通用接口库 .Net Core 3.1-实现公共接口库的库 以下也是事实: .Net Framework 4.7.2.通过Nuget .Net Core 3.1.通过Nuget引用了.Net标准2.0公共库(并实现了它) 我正在尝试创建.net core 3.1程序集的实例,然后从Framework 4.7.2应用程序调用该实例的方法框架应用程序知道调用哪些接口方

使用VisualStudio2019

有3个组件:

  • .Net Framework 4.7.2
    -主应用程序
  • .Net标准2.0
    -通用接口库
  • .Net Core 3.1
    -实现公共接口库的库
以下也是事实:

  • .Net Framework 4.7.2.
    通过
    Nuget
  • .Net Core 3.1.
    通过
    Nuget
    引用了
    .Net标准2.0
    公共库(并实现了它)
我正在尝试创建
.net core 3.1
程序集的实例,然后从
Framework 4.7.2
应用程序调用该实例的方法框架应用程序知道调用哪些接口方法。

实例创建工作正常,但当我尝试调用该实例的方法时,会引发以下异常:

{“无法加载文件或程序集的System.Runtime,版本=4.2.2.0, 区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'或其 依赖项。系统找不到该文件 指定。“:”System.Runtime,版本=4.2.2.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a“}

按照本线程中提到的建议,我在.Net Framework主应用程序中添加了对
NETStandard.Library v2.0.3
的Nuget引用,但没有解决此问题


是否可以在.net framework应用程序域中使用.net核心库?我做错了什么?

最终,问题可以追溯到这里:

.Net Core 3.1
-实现公共接口库的库

这是一个特定于平台的库,实现了公共接口库;您只能从netcoreapp3.1(或更高版本)使用它

如果要从.NET Framework代码库使用该库,该库应执行以下操作之一:

  • 目标netstandard2.0-如果在实现中不需要任何特定于框架的内容
  • 多目标netcoreapp3.1和netstandard2.0—如果您希望在netcoreapp3.1功能可用时使用这些功能,或者使用底层通用实现
  • 多目标netcoreapp3.1和net472-如果实现完全特定于平台,并且不可能实现通用实现
  • 多目标定位与更改csproj一样简单:

    netcoreapp3.1
    

    netcoreapp3.1;netstandard2.0
    
    您会自动获得一个
    NETCOREAPP3_1
    NETSTANDARD2_0
    构建符号,您可以使用
    #if
    ,或者您可以通过以下条件在csproj中做出其他决定:

    
    
    .NET Core是一个独立的平台。您不能在一个进程中组合.NET Core和.NET Framework程序集,除非这些程序集恰好是.NET标准程序集(这就是为什么.NET标准首先是一个东西),或者除非由于兼容性问题框架程序集在Core上“恰好工作”(另一种方式是绝对不可能的)。这意味着实现也必须符合.NET标准;您无法通过滑入驻留在.NET标准库中的接口来避免不兼容。@Jeroenmoster即使我将.NET core应用程序发布为一个自包含的应用程序,它仍然是真的吗?@Alex是的,基本上您可以将.NET core代码编译为自己的应用程序,但随后您将使用两个单独的进程(一个框架,一个核心)你必须在他们之间进行沟通。当然,这解决了任何不兼容问题,代价是更复杂的体系结构和必须执行IPC。@MarcGravel感谢您的快速响应。我将结束这个问题。编辑:太晚了吗?:)很好的解释。。现在我想起来了,这很有道理。。对于.Net系列中的所有实现,CLR必须不同。“标准”是每一个实现都同意的共同点。