【问题标题】:Target framework dnx451 or net451 in class library projects类库项目中的目标框架 dnx451 或 net451
【发布时间】:2016-02-03 03:28:05
【问题描述】:

据我了解,目标框架dnx451net451 都使用桌面.NET Framework 4.5.1。 dnx451 特别适用于 DNX 运行时应用程序并支持 ASP.NET 5。

如果我们有一个包含 ASP.NET 5 项目和多个类库的解决方案,它们应该都以 dnx451 为目标,还是只有 Web 项目需要以 dnx451 为目标?类库可以只针对net451吗?

【问题讨论】:

  • 他们应该都以 dnx451 为目标还是只有 web 项目需要以 dnx451 为目标?类库可以只针对 net451 吗? ...那么当您尝试这些场景时发生了什么?
  • @jltrem:它在 VS 中构建,但在我的集成构建中因 dnu publish 而中断,带有一些 ArgumentNullException as posted here

标签: visual-studio-2015 asp.net-core dnx


【解决方案1】:

更新

根据https://github.com/aspnet/Announcements/issues/98,命名有所改变。

对于 RC1 应用程序和测试项目,仍应以 dnx4x 和 dnxcore50,根本不需要改变。任何有 Program.Main 或 Startup.cs 被视为应用程序。

只有类库应该更改为以 net4x 和 dotnet5.x 为目标。为了 类库推荐的转换步骤是:

在 project.json 中:

将 dnx4x 更改为 net4x(例如,将 dnx451 更改为 net451)

将 dnxcore50 更改为 dotnet5.4

在你的 CS 文件中:

将#if DNX451 更改为#if NET451

将#if DNXCORE50 更改为#if DOTNET5_4


如果您有一个针对多个框架的项目并且想要添加对库的一般引用,则该库必须支持所有这些框架。如果您指定某个框架本身引用该库,则该库只需要支持所选框架。

如果我想为我的所有框架引用 library1 示例:

"dependencies": {
    "library1": "1.0.0"
},

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
}

那么library1必须支持dnx451和dnxcore50

如果我想引用 library1 但它只支持 dnx451 那么这是我唯一的选择:

"dependencies": {
},

"frameworks": {
    "dnx451": {
        "dependencies": {
           "library1": "1.0.0"
        }
     },
    "dnxcore50": { } 
}

但这意味着 library1 代码不能在 dnx451 中使用。

要解决这个问题,您可以使用编译时条件:

#if DNX451
    //Code here for dnx451
#elif DNXCORE50
    //code here for dnxcore50
#endif

或者另一种解决方法是为其他依赖项使用另一个库

澄清一下,这个库可以支持比您的项目更多的框架。所以 library1 可以支持 dnx451 和 dnxcore50 而你的项目只支持 dnx451 就可以了

【讨论】:

  • dnx451 和 net451 是否相互兼容,因为它们都使用 .NET Framework 4.5.1?
  • 我不确定,也没有测试过,但是任何 dnx 都将作为运行时与解决方案一起部署,或者在 net451 为用户的特定运行时安装将安装在 Windows 中。据我所知,它们是同一个东西,但我不知道 VS 或编译器是否会将依赖项识别为同一个东西
  • dnxcore 使用“bin 可部署”的 .NET Core Framework。我相信dnxdnxcore 的不同之处在于它使用的是.NET Framework 的桌面版本。我只是不知道框架的哪个版本以及它如何适应 ASP.NET 5!
  • 这并没有真正回答上述问题,这更多的是关于dnx451net451 之间的区别,而不是dnxcorednx451(后者对我来说很清楚-它们完全不同的框架 - 但前者仍然不是)。
  • 对于 xunit 等测试项目,您将需要 dnx451dnxcore50 xunit.github.io/docs/getting-started-dnx.html
【解决方案2】:

名称 dnx451 或 net451 本质上是相同的。

它们在某个时候被重命名,所以dnxcore50 变成了dotnet5.4dnx451 变成了net451

供参考:https://github.com/aspnet/Announcements/issues/98

【讨论】:

    【解决方案3】:

    如果您的类库不依赖于 .Net SDK 的特定行为(例如 DNX 或完整的 .Net 框架),您应该以 dotnet 为目标。但这仅适用于较新的 SDK(.Net 4.6、UWP 和 DNX),

    http://oren.codes/2015/06/09/pcls-net-core-dnx-and-uwp/

    【讨论】:

      【解决方案4】:

      您的库必须支持您的 Web 项目所针对的所有框架。这就是为什么 VS15 中的默认类库项目针对 dotnet,它支持最广泛的框架。

      【讨论】:

        猜你喜欢
        • 2016-11-01
        • 2016-01-10
        • 2016-05-02
        • 2023-03-22
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多