c# - 将 .NET Core 与旧版 .NET 框架 dll 一起使用

标签 c# .net .net-core visual-studio-2017

我可以将 .NET Core 与旧版 .NET Framework dll 一起使用吗?答案似乎是否定的......但我只能找到引用project.json 的资源,它不再存在。

我创建了一个新的 .NET 核心库并尝试引用旧的 .NET 框架 DLL。当我尝试调入 DLL 时,VS 2017 提示我没有正在寻找的 Stream 对象。

它建议我引用 mscorlib.dll 或安装 NuGet 包。

快速帮助未能引用 mscorlib.dll。如果我手动引用它,我会收到以下错误:

The type 'TargetFrameworkAttribute' exists in both 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' C:\Users...\AppData\Local\Temp.NETCoreApp,Version=v1.1.AssemblyAttributes.cs

NuGet 包是 Microsoft.NETFx2.0。快速帮助安装失败。如果我从命令行运行它:

> PM> install-package microsoft.netfx20   GET
> https://api.nuget.org/v3/registration2-gz/microsoft.netfx20/index.json
> OK
> https://api.nuget.org/v3/registration2-gz/microsoft.netfx20/index.json
> 46ms Restoring packages for ... Install-Package : Package
> Microsoft.NetFX20 1.0.3 is not compatible with netcoreapp1.1
> (.NETCoreApp,Version=v1.1). Package Microsoft.NetFX20 1.0.3 supports:
> net20 (.NETFramework,Version=v2.0)At line:1 char:1
> + install-package microsoft.netfx20
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
>     + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
> Install-Package : One or more packages are incompatible with
> .NETCoreApp,Version=v1.1.At line:1 char:1
> + install-package microsoft.netfx20
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
>     + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
> Install-Package : Package restore failed. Rolling back package changes
> for .At line:1 char:1
> + install-package microsoft.netfx20
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>     + CategoryInfo          : NotSpecified: (:) [Install-Package], Exception
>     + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
> Time Elapsed: 00:00:00.8035644

最佳答案

困难的话题。通常 .NET Framework 和 .NET Core 是不兼容的。它们针对一组不同的程序集(mscorlib 与 System.Runtime),这会导致不兼容,因为类型的所有用法都以该类型来自的程序集为前缀。

从 .NET Core 2(目前处于预览阶段)开始,您可以通过不可见的兼容性填充程序引用 .NET Framework 程序集。这允许您引用程序集并成功编译。

虽然它不能保证应用程序会成功运行,因为 .NET Core 不提供 .NET Framework 中的所有 API。如果是这种情况,您将在运行时得到 PlatformNotSupportedExceptionMissingTypeException 和 friend 。

关于c# - 将 .NET Core 与旧版 .NET 框架 dll 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47567039/

相关文章:

c# - 自定义字符串格式,数字到时间

c# - 如何在 Visual Studio C# 上将 MySql 中的列显示到 Windows 窗体文本框中?

c# - .net compact/xna 3.1 for xbox 360 中的 Rx 扩展/并行任务库?

C# 创建隐藏事务

.net - OpenId Connect - 可以使用客户端证书进行身份验证吗?

azure - Azure DevOps 中的 .Net Core Seleniun 测试 - 没有文件与 .Net 还原任务的搜索模式匹配错误

c# - GZip/Deflate 压缩适用于 .NetCore 2.0,但不适用于 .Net 4.6.2

c# - 部署时 ASP.net CS1061 编译错误

.net - 如何从 kubernetes 部署配置文件中的 helm 获取运行时设置以覆盖 asp.net 中的 appsettings

c# - 在 Linux 容器上导入 PowerShell 二进制模块时不导出命令