【问题标题】:Multi-targeting a project to enable both 4.5 and 5 versions of .net多目标项目以启用 .net 的 4.5 和 5 版本
【发布时间】:2015-01-29 18:35:48
【问题描述】:

我正在尝试使用 VS2015 创建某种统一的开发框架。

整个想法是将代码统一到一个针对 .net 4.5、aspnet50 和 aspnet50core 的项目中(尽可能)。

其中一个基本接口应定义:

  • .NET 4.5 的 System.Data.IDbConnection
  • 用于 AspNet 5 的 System.Data.Common.DbConnection

如下:

public interface
{
#if ASPNET50
    System.Data.Common.DbConnection GetConnection();
#endif

#if NET45
    System.Data.IDbConnection GetConnection();
#endif
}

我已将project.json 更新为:

"frameworks": {
    "net45": {
        "dependencies": {
        }
    }
    "aspnet50": {
        "dependencies": {
            "System.Data.SqlClient": "1.0.0-beta2"
        }
    }
}

我唯一的选择是将System.Data.Common 引用到.net 4.5 dependencies(但由于它不是为支持.net 4.5 而构建的,所以无法使用)。

如果我尝试引用 "System.Data": "4.0.0.0" 甚至没有版本号,VS2015 无法解析为 gac 并且无法识别该引用。

有希望吗?

【问题讨论】:

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


    【解决方案1】:

    通常你会看到类似下面的设置:

    • [解决方案]
      • [项目1]
        • [属性]
        • Project1.NET45.csproj
        • Project1.ASPNET5.csproj
        • Class1.cs

    在每个项目中定义一个符号(例如ASPNET5NET45)。然后每个人都会引用对该构建重要的程序集。此外,您可以在两个项目中包含公共文件(并且在这些文件中使用每个项目中的符号来区分代码),但您也可以分解特定于版本的功能的实现(例如,仅包含的 Class1.NET45.cs在 NET45 项目中)

    【讨论】:

    • 不确定它是否适合 Asp.Net 5 项目,如果可以的话。问题是 VS 改变了它与 Asp.Net 5 (vNext) 项目一起工作的整个方式。
    • @ALMMa - 从 CTP5(刚刚发布)开始,我相信它现在也可以处理标准的 .csproj 文件了
    • 支持VS有一段时间了...vNext on VS2014(那是CTP4)。
    • @BradChristie,这确实成功了。比简单地添加相应的 csproj 文件要复杂得多,因为 kproj (vnext) 项目的工作方式完全不同。但是通过一些额外的工作,它变得可能就好了。现在,动手将其放入 nuget 包中 =) 谢谢!
    • @BradChristie 经过一些测试,将“net45”更改为“net451”或“net452”在“vNext”项目中工作,无需创建单独的csproj 文件和所有文件。由于我们目前使用 .net 4.5.1,我认为这将是我们框架的最佳方法 =)
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 2014-06-16
    • 2018-07-08
    • 1970-01-01
    • 2023-04-11
    • 2015-08-16
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多