【问题标题】:Error referencing Net Standard from Net 4.6.1 / 4.7从 Net 4.6.1 / 4.7 引用 Net Standard 时出错
【发布时间】:2017-10-25 15:26:58
【问题描述】:

我有一个最初针对 4.6.1 的网络应用程序。这个网络应用程序引用了一个类库;反过来,这又引用了一个 Net Standard 1.6 类库。

添加对 Net Standard 库的引用是最新的更改,并且似乎导致它崩溃:在引入 Net Standard 库之前,Web 应用程序运行良好;此时,我开始收到错误:

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

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

这可能不相关,但是当我查看包目录时;我看到 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 的更新将解决该问题。

网络上有足够多的最新内容让我觉得我不是唯一一个经历过这种情况的人;虽然我还没有找到任何解释可能是什么原因。任何人都可以解释可能导致此问题的原因或我可以使用的任何诊断步骤吗?

【问题讨论】:

  • 你用的是什么版本的visual studio?
  • Visual Studio 2017 (15.4.1)
  • 也许您可以创建最小的项目来复制它并将其发布到某个地方?
  • 如果您还没有看到this,请查看。听起来像你的问题。
  • 也许只有我一个人,但老实说,所有这些网络标准的东西似乎都过于复杂和骇人听闻。必须有更好的方法来实现共享库功能……

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我正在/正在针对 Net Core 2.0 SDK 运行 - 所以这不是导致问题的原因。
    【解决方案3】:

    经过漫长的转换过程,我描述了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 项目的所有其他引用也应在主项目中引用。

    【讨论】:

      【解决方案4】:

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

      理论上升级到 4.7 应该意味着它引用了 net462,但它可能是因为它太先进了,以至于并非一切都正常工作。您是否尝试更新到 4.6.2?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-12
        • 2018-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多