为什么我的PCL不能使用System.Runtime?

我有一个针对以下平台的PCL:

  • .NET Framework 4.5
  • Windows 8
  • Windows Phone 8.1

我需要添加对System.Runtime的引用,因为我想使用另一个依赖它的包。 从我所看到的, 版本4.0.0似乎包括上面提到的目标平台。 但是,当我尝试通过NuGet安装它时,我得到了这个堆栈跟踪:

 PM> Install-Package System.Runtime -Version 4.0.0 # ... Install failed. Rolling back... Package 'System.Runtime 4.0.0' does not exist in project 'PclDummy' Package 'System.Runtime 4.0.0' does not exist in folder 'C:\Users\James\Documents\Visual Studio 2015\Projects\PclDummy\packages' Install-Package : Could not install package 'System.Runtime 4.0.0'. You are trying to install this package into a project that targets '.NETPortable,Version=v4.5,Profile=Profile111', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author. 

如果System.Runtime支持我的PCL所做的所有平台,为什么会发生这种情况?

针对’.NETPortable,Version = v4.5,Profile = Profile111′

务必区分引用程序集和运行时程序集。 要编译您的PCL项目,您只需要参考程序集。 并且您已经拥有一个System.Runtime,它位于您计算机上的C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETPortable \ v4.5 \ Profile \ Profile111目录中。 它已在您的项目中引用,因此包被正确拒绝。

这些疯狂的“但每个人都已经拥有这个”Nuget包来自CoreCLR项目。 它正在快速发展,测试版本以非常高的速度发布。 这是Profile111支持的目标之一,它支持ASP.NET Core 5.0目标。 不是你在问题中列出的那个,所以你根本不需要它。 但是,如果你愿意那就是下载这个Nuget包的项目。 这是完全自动的,你不要明确要求包。

只是停止尝试安装它。

似乎版本4.5中不完全支持System.Runtime。

您可以在以下路径中的配置文件文件夹中检查它:

 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile\Profile111 

有一个受支持的程序集和命名空间列表。