具有遗留支持的基于实体框架的工具的多目标开发

时间:2012-10-12 16:36:38

标签: entity-framework

我正在开发一个(免费的,开源的)实体框架工具,它基本上是一个ADO.NET提供者,但它也使用了一些更高的抽象(例如ObjectContext,EntityConnection)。我希望它支持几乎所有旧版本的EF(EF4 =<)。在EF5问世之前,它非常容易,因为我只能通过仅针对.NET40来开发它。

EF5使事情变得更加复杂,因为一些新功能需要.NET45框架。另一方面,EF5也支持.NET40。最重要的是,EF现在独立于.NET框架开发。

目前,很明显,针对.NET40和.NET45都是不可避免的。但目前我不知道设置符合独立开发EF的多目标环境的最佳方法是什么。我还没有找到关于这个问题的任何好文件。

我应该使用多个解决方案文件吗?多个项目文件?多解决方案配置?以某种方式参考所有版本的EF?创建通用构建脚本?如果有,怎么样?如何针对不同配置运行我的单元测试?如何表明测试可以/应该在特定配置中失败?更改的命名空间(例如ObjectContext)怎么样?我应该使用#if指令来解决这个冲突吗?如果新的EF版本需要实现一个会破坏以前版本兼容性的功能,该怎么办?我现在真的很不确定。

1 个答案:

答案 0 :(得分:2)

http://entityframework.codeplex.com/查看EF6代码库。我们基本上按照您建议的方式构建用于.NET 4和.NET 4.5的EF6 - 使用多个构建配置。

其他一些要考虑的要点:

  • 如果您不使用任何.NET 4.5 API或行为,那么您可能只能定位.NET 4版本。如果您正在使用EntityFramework.dll中的任何内容,那么这可能需要绑定重定向才能使用5.0版本,但在很多情况下,如果您作为NuGet包发布,那么NuGet将为您处理此问题。
  • 如果您计划支持EF6,请记住核心类型已移出.NET Framework。这意味着,例如,EF5 ObjectContext是与EF6 ObjectContext不同的类型。您可能需要两次编译提供程序代码以创建EF6和EF5版本才能处理此问题。有关详细信息,请访问:http://entityframework.codeplex.com/wikipage?title=Rebuilding%20EF%20providers%20for%20EF6