将 .net 4.5 引用添加到 Asp.net vNext 项目

5
我正在尝试向一个asp.net 5的入门级Web项目添加 .net 45 的引用,但是我遇到了以下错误:enter image description here

难道你不认为这个错误是正确的吗?你添加了对 .net 4.5 的引用,但你使用的是基于 .net 4.6 和 asp.net 5 的起始项目。 - dotnetstep
2个回答

4
虽然你可以通过类似于你在示例中所做的方式来针对多个框架进行定位,但我认为你可能无法使StarterWeb项目在.NET 4.5下运行而不进行一些重大更改。
当处理多个框架时,如果你将鼠标悬停在带有错误的代码上,Visual Studio 2015实际上会提供很多帮助:
一个明显的困难是让StarterWeb项目工作的过程中,MVC 5和6之间的许多部分已经移动到新的命名空间并拆分为不同的程序集。最值得注意的是,MVC 5包依赖于System.Web,而StarterWeb项目使用的6.0 beta则没有。由于MVC库已经移动,因此Authorize属性现在在Microsoft.Aspnet.Mvc中,而在早期版本中则属于System.Web.Mvc。
虽然理论上你可能可以针对不同的MVC版本进行定位,但在实践中这可能不值得麻烦。即使你找到了Authorize,也不能保证它将是“相同”的一个,即使它编译成功。
如果你想走这条路(或者只是在一般情况下定位多个框架时),你可以在project.json文件中控制哪个框架使用哪个包。
如果包与所有目标框架兼容,则可以将它们留在project.json文件的父依赖项区域中,但是当它们特定于给定框架时,你需要向该特定框架的配置添加一个子依赖项部分。对于.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出色的博客文章,以查看有关多重框架定位的详细信息和大量截图的演示。新项目系统的一个好处是可以轻松地为您选择的所有框架创建NuGet包装,并且他还更详细地介绍了它。

0

在VS2015 RTM/ASP.NET Beta5中,将与vNext项目在同一解决方案中的.NET 4.5项目作为引用添加仍然无法正常工作。该项目似乎无法找到源代码/二进制文件,并尝试在nuget中查找它。我按照global.json、dnx451依赖项的推荐步骤进行了操作。

我的解决方法是:

  • 在后期构建步骤中使.NET 4.5项目打包成nuget包
  • 向本地包文件添加软件包源位置

这样,我就可以加快开发周期,而不需要进行nuget发布。一个问题是,使用$的相对包源路径将被替换为绝对路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接