0

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

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

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

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

4

1 回答 1

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
于 2012-10-23T16:34:49.150 回答