【问题标题】:Referencing libraries in .NET Framework not in .NET Standard在 .NET Framework 中引用库,而不是在 .NET Standard 中
【发布时间】:2016-09-15 16:10:17
【问题描述】:

我目前正在将一个类库项目从 DNX (RC1) 迁移到 dotnet cli (RC2)。之前项目引用了.NET v4.5.1框架库,project.json文件长这样:

  "frameworks": {
    "net451": {
      "frameworkAssemblies": {
        "System.Runtime": "4.0.10.0",
        "System.Web": "4.0.0.0",
        "System.DirectoryServices": "4.0.0.0",
        "System.DirectoryServices.AccountManagement": "4.0.0.0",
        "System.ServiceModel": "4.0.0.0",
        "System.ServiceModel.Security": "4.0.0.0"
      }
    }
  }

据我所知,(我可能错了)与 DNX 不同,新的 dotnet Cli 不支持 .NET 4.5.1,而是支持 .NET Standard。

所以问题是,.NET Standard 没有我想要的所有库。我必须更改什么才能引用 .NET 4.5.1 框架库?我阅读了有关导入声明的信息,但无法使其正常工作。这是我目前所拥有的(更新)

  "frameworks": {
    "net451": {
      "frameworkAssemblies": {
        "System.Runtime": "4.0.10.0",
        "System.Web": "4.0.0.0",
        "System.DirectoryServices": "4.0.0.0",
        "System.DirectoryServices.AccountManagement": "4.0.0.0",
        "System.ServiceModel": "4.0.0.0",
        "System.ServiceModel.Security": "4.0.0.0"
      }
    },
    "netstandard1.5": {
      "imports": [ "dnxcore50", "portable-net451+win8" ]
    }
  }

我收到如下错误:

我对我还需要做什么有点迷失......有什么想法吗?

【问题讨论】:

    标签: asp.net asp.net-core dotnet-cli


    【解决方案1】:

    dotnet 支持net451Here's an example of application that has both net451 and netstandard.

    如果您的应用在 RC1 中的完整桌面上运行,则将其迁移到 RC2 中的完整桌面应该没有问题。

    【讨论】:

    • 您缺少netstandard 的一些包引用。 ParallelQuerySystem.Linq.Parallel 中。将其添加到依赖项部分。这是一个示例:github.com/aspnet/Options/blob/dev/src/…
    • 我明白了,谢谢。我还有两个错误。缺少 System.Web,并且 System.Data 库缺少 DataRow 和 DataColumn 定义(但有 DataTable)。有什么想法吗?
    • CoreCLR 不存在 System.Web。你必须寻找替代品
    【解决方案2】:

    尝试使用netcoreapp1.0 而不是netstandard1.5 滚动。

    new RC2 templates 生成以下project.json 框架元素(默认情况下):

    "frameworks": {
      "netcoreapp1.0": {
        "imports": [
          "dotnet5.6",
          "dnxcore50",
          "portable-net45+win8"
        ]
      }
    },
    

    GitHub 上对此进行了一些讨论。引用 Richlander 的话:

    • netstandard -> NETStandard.Library(这应该适用于所有 .NET
    • netstandardapp -> NETStandard.App(与 NETStandard.Library + 应用主机)
    • netcoreapp -> Microsoft.NETCore.App(这是 .NET Core 基础安装)

    【讨论】:

    • 我也试过了,但或多或​​少还是同样的错误。
    【解决方案3】:

    查看 GitHub 上的 .NET Platform Standard documentation

    netstandard1.5 目标名字对象以 .NET 4.6.2 为目标,这意味着您无法在 .NET 4.5.1 项目中运行它。

    针对 .NET 4.5.1 及更高版本的正确名称是 netstandard1.2

    本质上,目标名字对象告诉您哪个框架是最低支持的。支持的框架越低,您可以使用单个名字对象定位的框架越多,而无需条件预处理器指令。

    而且,目标名称越低,可用的新功能就越少(即Task.CompletedTask)。

    当您需要针对较旧的框架并希望使用新功能时,您必须使用多个目标,即使用旧 api 的 netstandard1.2 和使用 .NET 4.6+ Api 并使用条件预处理器指令的 netstandard1.3在特定目标中使用新的 Api 调用。

    【讨论】:

    • 认为你搞错了:这个问题是关于引用 .Net 4.5.1 中的程序集,但不在 netstandard 中,如 System.Web。更改您所针对的 netstandard 版本无济于事。
    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 2021-12-04
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多