2017-10-20 177 views
11

我有一个最初以4.6.1为目标的Web应用程序。此Web应用程序引用类库;而这又引用了Net Standard 1.6类库。从Net 4.6.1/4.7引用Net Standard的错误

将引用添加到Net Standard库是最新的更改,并且似乎导致它中断:Web应用程序工作正常,直到引入Net Standard库为止;在这一点,我开始收到错误:

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.

System.Runtime包括作为NuGet包的Web应用程序。

它可能不相关,但是当我查看packages目录时;我看到System.Runtime.4.3.0 \ lib有net45net462目录,但不是4.6.1或4.7(请参阅下面为什么我期望这样做)。

,我已经尝试了一些东西,都没有奏效:

  • 尽管看到here是4.6.1支持网络标准1.6,我曾尝试 升级到4.7,但无济于事。
  • 尝试在web.config中设置程序集重定向。这稍微改变了错误,说它正在寻找4.0.0.0,然后重新开始,但它本质上是相同的错误。
  • 尝试删除软件包目录,看看我是否可以强制刷新(也试过System.Runtime Update-Package)。
  • 在搜索网页时,我发现了一些类似的问题;一个在GitHub上(我似乎无法重新定位)意味着对VS2017的更新将解决该问题。

网上有足够的最新资料,让我觉得我不是唯一的人来体验这一点;尽管我还没有找到任何可能的原因的解释。任何人都可以提供关于可能导致这种情况的解释,或者我可以使用的任何诊断步骤?

+0

您使用的是什么版本的visual studio? –

+0

Visual Studio 2017(15.4.1) –

+0

也许您可以创建最小化的项目来重现此问题并将其发布到某处? – Evk

回答

2

.NET标准文档herehere在涉及.NET Framework时存在冲突的信息。我怀疑后者是最新的。

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

或者,.NET Standard 1.5及以下版本在安装.NET Core 1.0 SDK时受支持。

+0

我是/针对Net Core 2.0 SDK运行 - 所以这不是什么原因造成的问题。 –

0

值得指出的是,NuGet将安装最新的框架版本或低于您的项目的目标框架。这意味着,当它的目标是4.6.1时,引用的版本将是net45或4.5,从而使您一路下降到Net Standard 1.1。

理论上升级到4.7应该意味着它引用了net462,但它可能是如此的流血,以至于并非所有东西都能正常工作。你有没有尝试更新到4.6.2?

0

经过长时间的转换过程后,我描述了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

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