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

时间:2015-08-05 13:55:46

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

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

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

4 个答案:

答案 0 :(得分:7)

<强>更新

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文件中:

     

将#f 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": { } 
}

但这意味着无法在dnx451中使用library1代码。

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

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

或者另一种解决方法是使用另一个库来实现其他依赖

只是为了澄清,该库可以支持比您的项目更多的框架。所以library1可以支持dnx451和dnxcore50,而你的项目只支持dnx451,它会很好

答案 1 :(得分:3)

monikers dnx451或net451基本上是一回事。

他们在某个时候被重命名,dnxcore50成为dotnet5.4dnx451成为net451

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

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