从Net 4.6.1 / 4.7

时间:2017-10-20 15:05:39

标签: c# asp.net .net .net-standard

我的网络应用最初定位为4.6.1。此Web应用程序引用类库;反过来,这引用了Net Standard 1.6类库。

添加对Net Standard库的引用是最新的更改,并且似乎已导致它中断:Web应用程序正常工作,直到引入Net Standard库;此时,我开始收到错误:

  

无法加载文件或程序集&System; Run.Runtime,Version = 4.1.0.0,   Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个   依赖。系统找不到指定的文件。

System.Runtime作为NuGet包包含在Web应用程序中。

它可能没有关系,但是当我查看packages目录时;我看到System.Runtime.4.3.0 \ lib有net45net462目录,但不是4.6.1或4.7(见下文我为什么会这样)。

我尝试过的一些无效的事情:

  • 尽管看到here 4.6.1支持Net Std 1.6,但我确实尝试过 升级到4.7,但无济于事。
  • 尝试在web.config中设置程序集重定向。这会稍微改变错误,说它正在寻找4.0.0.0然后重新直接启动,但它本质上是相同的错误。
  • 尝试删除packages目录,看看我是否可以强制刷新(也尝试在System.Runtime上使用Update-Package)。
  • 在搜索网页时,我发现了几个类似的问题; GitHub上的一个(我似乎无法重新定位)暗示VS2017的更新可以解决问题。

网上最近有足够的东西让我觉得我并不是唯一能够体验到这一点的人;虽然我没有找到任何解释可能是什么原因。任何人都可以解释可能导致这种情况的原因,或者我可以使用的任何诊断步骤吗?

4 个答案:

答案 0 :(得分:3)

我有类似的问题,我通过从项目中删除System.Runtime引用并通过Nuget(Net Standard兼容)安装它来解决它。它不是唯一有问题的软件包(例如,System.Net.Http)。此外,如果您的解决方案中有多个项目,则应在每个项目上安装Net Standard。

答案 1 :(得分:2)

.NET Framework文档herehere在.NET Framework方面有相互矛盾的信息。我怀疑后者是最新的。

基本上,它表示.NET Standard 1.6不支持.NET Framework,除非您安装了.NET Core 2.0 SDK

或者,安装.NET Core 1.0 SDK时支持.NET Standard 1.5及更低版本。

答案 2 :(得分:1)

经过漫长的转换过程后,我将其描述为here 我有以下经验:您必须在主项目中(在您的webapp .net 4.6.1中)安装NuGet包NETStandard.Library。它将安装大量的软件包。

我使用NETStandard.Library版本1.6.1。

如果在netstandard代码中使用System.Runtime.Serialization,则必须在主项目中安装System.Runtime.Serialization.Primitives和System.Runtime.Serialization.Xml或.Json。

此外,netstandard项目的所有其他参考资料也应在主项目中引用。

答案 3 :(得分:0)

值得指出的是,NuGet将在或更低项目的目标框架上安装最新的框架版本。这意味着当它以4.6.1为目标时,引用的版本将是net45或4.5,它会一直降低到Net Standard 1.1。

理论上升级到4.7应该意味着它引用net462,但它可能是如此前沿,以至于并非一切正常。您是否尝试更新到4.6.2?