问题 在类库项目中定位框架dnx451或net451


据我所知,目标框架 dnx451 和 net451 两者都使用桌面.NET Framework 4.5.1。 dnx451 特别适用于DNX运行时应用程序并支持ASP.NET 5。

如果我们有一个ASP.NET 5项目和多个类库的解决方案,那么它们都应该是目标 dnx451 或者只是Web项目需要定位 dnx451?类库是否可以定位 net451


10725
2017-08-05 13:55


起源

他们都应该针对dnx451,还是只有web项目需要针对dnx451?类库是否只针对net451? ...那么当你尝试这些场景时发生了什么? - jltrem
@jltrem:它建立在VS但是打破了 dnu publish在我的集成构建中使用了一些ArgumentNullException 发布在这里。 - davenewza


答案:


更新

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,它会很好


7
2017-08-05 23:47



并且dnx451和net451是否相互兼容,因为它们都使用.NET Framework 4.5.1? - davenewza
我不确定并且没有测试过,但是任何dnx都将作为运行时部署解决方案,或者作为用户的特定运行时安装,而net451将安装在Windows中。据我所知,它们是相同的,但我不知道VS或编译器是否会识别出依赖项的相同内容 - Gekctek
dnxcore 使用“可以部署”的.NET核心框架。我相信 dnx 与...不同 dnxcore 在那里使用桌面版的.NET Framework。我只是不知道哪个版本的框架以及它如何适应ASP.NET 5! - davenewza
这并没有真正回答所说的问题,更多的是关于它们之间的区别 dnx451 和 net451不是 dnxcore 和 dnx451 (后者对我来说很清楚 - 它们是完全不同的框架 - 但前者仍然不是)。 - Vojtěch Vít
对于测试项目,如 xunit, 你会需要 dnx451 和 dnxcore50  xunit.github.io/docs/getting-started-dnx.html - Jaider


绰号dnx451或net451基本上是一回事。

他们在某个时候重新命名,所以, dnxcore50 成为 dotnet5.4 和 dnx451 成为 net451

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


3
2018-01-30 02:53





如果您的类库不依赖于.Net SDK的特定行为(例如DNX或完整的.Net Framework),那么您应该定位 dotnet。但这只适用于较新的SDK(.Net 4.6,UWP和DNX),

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


2
2017-08-12 06:59





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


0
2017-08-06 08:32