.net core 有没有办法在.NET核心库中包含.NET Framework代码?

.net core 有没有办法在.NET核心库中包含.NET Framework代码?,.net-core,.net Core,我们有一个商业图书馆,我正在致力于移植到.NET核心。我想保留其中的几个调用,以便仅在.NET标准中运行时使用。对于好奇的人来说,其中一组是读取Windows服务器上需要凭据才能访问的文件 是否有: 一个电话会告诉我是否在.NET标准与.NET核心下运行。 有没有办法让一个类只在标准下运行时才会被实例化/调用,但DLL在核心下仍能正常加载? 由于您所描述的,拥有一个单一的nuget软件包,并且能够根据nuget软件包安装到的框架指定不同的行为或依赖关系,因此只能通过以下方式实现:我假设您正在或将

我们有一个商业图书馆,我正在致力于移植到.NET核心。我想保留其中的几个调用,以便仅在.NET标准中运行时使用。对于好奇的人来说,其中一组是读取Windows服务器上需要凭据才能访问的文件

是否有:

一个电话会告诉我是否在.NET标准与.NET核心下运行。 有没有办法让一个类只在标准下运行时才会被实例化/调用,但DLL在核心下仍能正常加载?
由于您所描述的,拥有一个单一的nuget软件包,并且能够根据nuget软件包安装到的框架指定不同的行为或依赖关系,因此只能通过以下方式实现:我假设您正在或将要这样做

一旦有了,就有预定义的变量可在预编译块中使用:

#if NETFRAMEWORK
    // use full framework class here. You were installed into a full framework app or library
#elif NETCOREAPP
    // use .NET Core class here. You were installed into a .NET Core app or library
#else NETSTANDARD
    // uh... okay... you were installed into another .NET Standard library, 
    // we still have no idea where *that* might be installed... help? 
    // Maybe make it configurable after all?
#endif

.NET标准不是运行时,而是运行时必须实现的一组API,以便兼容。因此,基本上这允许人们拥有一个库目标.NET标准,并拥有一个在所有受支持的运行时中运行的代码库,因为可以保证这些运行时将有这些API的实现

.NET标准根本没有实现,它只是定义了一组在编译时使用的API契约,但在运行时使用的API将是消费者决定将其应用程序作为目标的运行时API

更好的运行时检测方法是使用API。我们这样做是为了让我们的框架测试知道我们在运行什么测试:


您也可以通过反射来实现这一点,方法如下:typeofstring.Assembly。。。如果程序集是System.Private.CoreLib,则您在.NET Core上,如果是mscorlib,则您在.NET Framework中。

因此,您基本上需要在运行时决定.NET Core代码是否在Windows上运行,对吗?标题与正文不匹配。是关于拥有代码还是运行代码?@Marcel Correct,在运行时如果我在Core中运行,我返回无法读取\\server\share需要凭据的文件。如果是.net标准,我会读的。啊。。。你不能?它要么是.NET标准库,要么不是。如果将其移植到.NET Core,则只有.NET Core项目可以使用它们。或者,您可以拥有多个targetframeworks,并提供带有多个库的nuget包,每个库为一个target编译一个。顺便说一句:一个不能是.NET标准的。该库可能是.NET标准库,但执行程序集的最终结果可能是完整框架或核心。好的,因此没有单个DLL。我们需要有条件地为标准框架或.NET核心构建。没什么大不了的,只是有点痛。附言-同意你对莫妮卡的看法。