运行ASP.NET Web应用程序时找不到System.Runtime 4.1.0.0

Tom*_*Tom 8 asp.net .net-core

我用以下projects.json创建了一个可移植类库

{
  "supports": {},
  "dependencies": {
    "Microsoft.CSharp": "4.0.1",
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
    "NETStandard.Library": "1.6.0",
    "System.Runtime.Serialization.Primitives": "4.1.1",
    "System.Runtime": "4.1.0"
  },
  "frameworks": {
    "net451": {},
    "netstandard1.5": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当从ASP.NET应用程序(而不是ASP.NET Core)引用它时,我得到以下运行时异常:

Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)

如果我从控制台应用程序引用它,它运行没有问题.

有任何想法吗?

编辑

在这里找到解决方案:https://stackoverflow.com/a/37639003/691045

Sar*_*zen 5

如更新中所述,该问题的一个解决方案是将PCL打包为nuget包.然而,这与使用PCL以.Net标准为目标时试图做的事情相反.此外,封装解决方案变得很麻烦.

对我来说,当将csproj跨越到xproj边界时,它似乎是Net Core Tools Preview的一个错误.要证明这一点,如果通过nuget安装包:

Install-Package System.Runtime
Run Code Online (Sandbox Code Playgroud)

System.Runtime看起来正确project.json"System.Runtime": "4.1.0".查看引用,可以看到该版本列为System.Runtime (4.0.20).实际的bin也绝对引用了实际的dll.

只需将.Net 4.6.2 dll从nuget缓存复制到bin中即可解决问题.这允许直接引用而无需打包PCL.

希望当我们达到Net Standard 2.0并且工具成熟一点时,这种类型的东西将成为过去.

更新:如果您使用最新的.Net Core版本(1.1)和二进制文件,这是固定的.工具预览仍在1.0.1上,因此您必须确保安装1.1的二进制文件.