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

时间:2016-07-11 15:16:21

标签: 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": {}
  }
}

但是,当从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.

如果我从控制台应用程序引用它,它会毫无问题地运行。

有什么想法吗?

修改

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

3 个答案:

答案 0 :(得分:5)

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

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

Install-Package System.Runtime

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

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

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

更新:如果您使用最新的.Net Core版本(1.1)和二进制文件,则会修复此问题。工具预览仍然在1.0.1上,因此您必须确保安装1.1的二进制文件。

答案 1 :(得分:0)

在运行单元测试时,我收到了来自ReSharper的类似警告:

对我有用的解决方案是在Package Manager控制台中运行它:

Update-Package System.Runtime -Reinstall

我观察到的是,在运行上述命令之前,受影响项目中的引用是System.Runtime v 4.0.20.0,但是执行后,它更改为4.1.1.0

答案 2 :(得分:0)

在将.NET框架从4.6.2升级到4.7之后我遇到了这个问题,在几个论坛和互联网上挖掘了一段时间并尝试了很多,我找到了一个解决方案并分两步完成:

  1. 我删除了所有Dependent Assambly并更新了所有nugets UPDATE-PACKAGE -projectName -reinstall。

  2. 在第一步之后,我检查了每个在运行时抛出异常的缺失组件并意识到在某些情况下框架在我们的本地机器中有一个与nuget无关的dll然后我删除了所有local的dll引用并从nuget安装它。从丢失的dll中清除后,从Nuget我的项目中运行它们没有任何问题。

  3. 希望能帮助你。