首页 文章

ASP.NET Core 5.0错误CS0012:类型'Object'在程序集'mscorlib中定义

提问于
浏览
4

在Visual Studio 2015中我有一个kproj,在这个项目中我想添加一个对任何公共nuget包源都没有的程序集的引用,所以我创建了自己的nuget包,这样就可以添加引用到这个集会 .

问题是,现在我遇到以下异常:

ASP.NET Core 5.0错误CS0012:类型“对象”在未引用的程序集中定义 . 您必须添加对程序集'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用 .

关于如何克服这个问题的任何想法?

4 回答

  • 5

    解决了它 . 从project.json中删除了框架“aspnetcore50”

  • 0

    正如您所写,从目标框架中删除 aspnetcore50 可以解决问题 . 但是,我想知道为什么以及它带来了什么,我找到了答案 .

    aspnet50aspnetcore50 之间的区别在于它们分别使用.NET Framework 4.6和.NET Core 5 . 一篇文章What is .NET Core 5 and ASP.NET 5 within .NET 2015 Preview很好地解释了这些差异,简而言之:

    当您在Core-CLR和.NET Core 5框架之上运行ASP.NET 5应用程序时,您将获得针对服务器/ Cloud 工作负载优化的端到端堆栈,这意味着高吞吐量,非常小内存中的足迹和最重要的事情之一,与您的应用程序相关的.NET Core 5框架版本(KRE或K运行时环境)的并行执行,无论其他版本的.NET可能安装在哪个版本中相同的服务器或机器 . 此外,如上所述,您可以在Mac或Linux上运行的Web服务上运行该Web应用程序 . 另一方面,当您在常规CLR和.NET Framework 4.6之上运行ASP.NET 5应用程序时,您将获得与现有.NET库的最高级别兼容性,并且比运行时获得的限制更少 . .NET Core 5的顶部 .

    这也意味着要利用这些强大的功能,您需要使用与.NET Core 5兼容的库 . 如果你有一个已编译的DLL,它是针对.NET Framework的,那么很可能它不兼容,你将不得不使用.NET Framework 4.6 .

    原因是.NET Core 5不包含Basic Class Library,它包含集合,IO,LINQ等常见组件.BCL组件现在作为单独的NuGet包提供,因此您可以包含在只投射你需要的部分 .

    关于.NET Core 5目标库的不同之处,您可以阅读Creating multi-target NuGet Packages with vNext

  • 5

    实际上,问题是需要asp.net 4.0或4.5版本(低于Core)的旧库 .

    Microsoft通过安装暂停的NuGet包为其提供解决方案 .

    PM> Install-package Microsoft.NETCore.Portable.Compatibility

    这样您就可以使用旧库运行代码 .

  • 4
    PM> Install-package Microsoft.NETCore.Portable.Compatibility
    

相关问题