添加.net 4.5对Asp.net vNext项目的引用

PIC*_*UFY 5 asp.net-mvc asp.net-core

我正在尝试添加.net 45引用到asp.net 5启动web项目......我得到了这个错误.在此输入图像描述

小智 4

虽然您确实可以按照与示例中类似的方式针对多个框架,但我认为如果不进行一些重大更改,您可能无法让 StarterWeb 项目在 .NET 4.5 下运行。

在处理多个框架时,如果将鼠标悬停在有错误的代码上,Visual Studio 2015 实际上会提供很多帮助:

Visual Studio 2015 CTP 5 显示 net45 共享代码存在问题

让 StarterWeb 项目正常运行的一个明显困难是,在 MVC 5 和 6 之间,许多部分已移至新的命名空间并分解为不同的程序集。最值得注意的是,MVC 5 包依赖于 System.Web,而 StarterWeb 项目使用的 6.0 beta 则不然。随着 MVC 库的移动,该Authorize属性现在位于 Microsoft.Aspnet.Mvc 中,而在早期版本中它属于 System.Web.Mvc。

虽然理论上您可能可以跨框架使用不同版本的 MVC,但实际上这可能不值得这么麻烦。即使您找到Authorize,也不能保证它将是“相同”的,即使它可以编译。

如果这是您想要走的路线(或者只是在一般情况下针对多个框架时),您可以控制文件中的哪个框架使用哪些包project.json

如果包与所有目标框架兼容,您可以将它们保留在文件dependencies的父区域中project.json,但是当它们特定于给定框架时,​​您需要dependencies向该特定框架的配置添加子部分。对于 .NET 4.5,您还可以通过添加部分来添加熟悉的框架程序集(而不是 NuGet 包)frameworkAssemblies

你最终会得到这样的结果:

"dependencies": {
    "SomeCommonPackage":"1.0.0"
},
"frameworks": {
 "aspnet50":{
    "dependencies":{
       "Aspnet50SpecificPackage":"1.0.0"
    },
  "net45":{
    "dependencies":{
       "NET45SpecificPackage":"1.0.0"
    },
    "frameworkAssemblies":{
       "System.Web":"4.0.0.0"
    }
Run Code Online (Sandbox Code Playgroud)

当您针对这些不同的框架时,您经常会发现至少某些代码必须特定于框架。为了解决这个问题,您可以为各种using语句添加编译器指令,以及依赖于仅在一个框架或另一个框架中可用的包的实际代码。

例如,您最终可能会得到如下所示的区域:

SomeType result;

#if ASPNET50
   result = SomeMethodNotAvailableIn45( );
#endif

#if NET45
   result = EquivalentMethodIn45( );
#endif
Run Code Online (Sandbox Code Playgroud)

显然这过于简单化,但它为您提供了基本公式:

  • 将共享依赖项放在根dependencies部分
  • 将特定于给定框架的依赖项放在其自己的dependencies部分中
  • 对无法共享的特定于框架的代码使用编译器指令

我还建议您看一下 Rick Strahl 的优秀博客文章,了解针对多个框架的精彩演练,其中包含更多细节和大量屏幕截图。新项目系统的一个很好的功能是,它可以轻松地为您选择的所有目标框架创建一个 NuGet 包,他也对此进行了更详细的介绍。