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

Dav*_*New 11 visual-studio-2015 dnx asp.net-core

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

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

Gek*_*tek 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文件中:

将#if DNX451更改为#if NET451

将#if DNXCORE50更改为#if DOTNET5_4


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

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

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

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
}
Run Code Online (Sandbox Code Playgroud)

然后library1必须支持dnx451和dnxcore50

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

"dependencies": {
},

"frameworks": {
    "dnx451": {
        "dependencies": {
           "library1": "1.0.0"
        }
     },
    "dnxcore50": { } 
}
Run Code Online (Sandbox Code Playgroud)

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

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

#if DNX451
    //Code here for dnx451
#elif DNXCORE50
    //code here for dnxcore50
#endif
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这并没有真正回答陈述的问题,更多的是关于`dnx451`和`net451`之间的差异,而不是'dnxcore`和`dnx451`(后者对我很清楚 - 它们是完全不同的框架 - 但前者仍然不是"T). (4认同)