【发布时间】:2018-04-14 16:03:35
【问题描述】:
我认为我的问题本身并不能很好地描述我的问题,所以我将描述我在做什么以及我是如何尝试去做的。
我们有一个将 MEFS 用于各种插件的旧项目。我们正在尝试将其转换为 dotnet 核心应用程序,以便我们可以将其部署到不同的操作系统。根据我的阅读,.net 核心仅部分支持 MEFS。 Microsoft.Composition 为插件提供了一些基本的支持,但是没有 Microsoft.Componentmodel.Composition,所以不能从目录加载插件(这是我需要做的)。
在阅读了 .net Standard 之后,我的印象是它提供了一组 API 来弥补 .net 核心和 .net 框架之间的差距。作为演示,我创建了一个包含 3 个项目的解决方案。 .net 核心项目、.net 标准项目和 .net 框架项目。 Core项目引用Standard项目,Standard项目调用Framework项目中的一些代码。我将此模型基于Announcing .NET Core 2.0 Preview 2 (向下滚动到“从 .NET Standard 引用 .NET Framework 库”)。
我发现的问题是我的框架代码总是抛出 TypeInitializationException。我相信在编译代码时,它会从 .net 标准框架中识别出一个库,但在运行时它实际上是在使用 .net Core 框架中的相同库(它更轻巧,并且遗漏了一些东西)。
我引用的类是System.ComponentModel.Composition.Hosting.AggregateCatalog
有没有办法指定我想从 .net Standard SDK 而不是 .net Core SDK 加载程序集?如果标准 dll 将被忽略,那么串联使用它们似乎没有任何好处。这是我的设置和我得到的异常的屏幕截图。
我只是对这里的基本原理有误解吗?
谢谢
【问题讨论】:
-
在此处阅读 .NET-Standard docs.microsoft.com/dotnet/standard/library - 简而言之,它只是一个抽象定义
-
@SirRufo 我看了 .net core 2.0 的介绍,他们听起来像是标准将统一核心和框架,至少在一定程度上,这样您就可以部署到各种操作系统。我想我误会了?这是否意味着无法使用 System.ComponentModel.Composition 的框架版本?
标签: c# asp.net-core