据我所知,目标框架 dnx451
和 net451
两者都使用桌面.NET Framework 4.5.1。 dnx451
特别适用于DNX运行时应用程序并支持ASP.NET 5。
如果我们有一个ASP.NET 5项目和多个类库的解决方案,那么它们都应该是目标 dnx451
或者只是Web项目需要定位 dnx451
?类库是否可以定位 net451
?
据我所知,目标框架 dnx451
和 net451
两者都使用桌面.NET Framework 4.5.1。 dnx451
特别适用于DNX运行时应用程序并支持ASP.NET 5。
如果我们有一个ASP.NET 5项目和多个类库的解决方案,那么它们都应该是目标 dnx451
或者只是Web项目需要定位 dnx451
?类库是否可以定位 net451
?
更新
每 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基本上是一回事。
他们在某个时候重新命名,所以, dnxcore50
成为 dotnet5.4
和 dnx451
成为 net451
。
如果您的类库不依赖于.Net SDK的特定行为(例如DNX或完整的.Net Framework),那么您应该定位 dotnet
。但这只适用于较新的SDK(.Net 4.6,UWP和DNX),
您的库必须支持您针对其进行Web项目的所有框架。这就是为什么VS15中的默认类库项目以dotnet为目标,它支持最广泛的框架。