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

时间:2015-02-19 09:33:18

标签: asp.net-mvc asp.net-core

我试图将.net 45引用添加到asp.net 5启动网络项目中......我发现了这个错误。enter image description here

2 个答案:

答案 0 :(得分:4)

虽然您可以以与您在示例中完成的方式类似的方式定位多个框架,但我认为您可能无法在没有某些框架的情况下让StarterWeb项目在.NET 4.5下运行重大变化。

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

Visual Studio 2015 CTP 5 showing net45 has a problem with the shared code

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

虽然理论上你可能会在框架中定位不同版本的MVC,但实际上这可能不值得。即使您找到Authorize,也不能保证它会是"相同的"一,即使它编译。

如果这是您想要的路线(或者只是在定位多个框架时),您可以控制project.json文件中哪个框架使用哪些包。

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

你最终会得到这样的东西:

"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"
    }

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

例如,您最终可能会看到类似这样的区域:

SomeType result;

#if ASPNET50
   result = SomeMethodNotAvailableIn45( );
#endif

#if NET45
   result = EquivalentMethodIn45( );
#endif

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

  • 将共享依赖项放在根dependencies部分
  • 将特定于特定框架的依赖项放在其自己的dependencies部分
  • 将编译器指令用于不能共享的特定于框架的代码

我还建议你看看Rick Strahl的优秀blog post,看看有关更多细节和大量屏幕截图的多个框架的精彩演练。新项目系统的一个很好的特性是它可以轻松地为你选择的所有框架创建一个NuGet包,并且他也会详细介绍它。

答案 1 :(得分:0)

添加与vNext项目相同的解决方案中的.NET 4.5项目仍然无法在VS2015 RTM / ASP.NET Beta5中运行。该项目似乎无法找到源/二进制文件并尝试查找nuget。我遵循了global.json,dnx451依赖项的推荐步骤。

我的工作是

  • 在后期构建步骤中使.NET 4.5项目包成为一个nuget包
  • 将包源位置添加到本地包文件

这样我就可以在不需要nuget发布的情况下加快开发周期。一个问题是使用$的相对包源路径被绝对路径替换。