0

私は(無料のオープンソースの)Entity Frameworkツールを開発しています。これは基本的にADO.NETプロバイダーですが、より高度な抽象化(ObjectContext、EntityConnectionなど)も使用しています。EFのほとんどすべてのレガシーバージョン(EF4 = <)をサポートする必要があります。EF5が出るまでは、.NET40だけをターゲットにして開発できたので、とても簡単でした。

一部の新機能には.NET45フレームワークが必要なため、EF5では事態がさら​​に複雑になりました。一方、EF5は.NET40もサポートしています。その上、EFは現在.NETFrameworkから独立して開発されています。

今のところ、.NET40と.NET45の両方をターゲットにすることは避けられないことは明らかです。しかし、現在、私は、独自に開発されたEFに準拠できるマルチターゲット環境をセットアップするための最良の方法が何であるかわかりません。また、この問題に関する適切なドキュメントも見つかりませんでした。

複数のソリューションファイルを使用する必要がありますか?複数のプロジェクトファイル?複数のソリューション構成?どういうわけかEFのすべてのバージョンを参照しますか?ユニバーサルビルドスクリプトを作成しますか?はいの場合、どのように?さまざまな構成に対して単体テストを実行するにはどうすればよいですか?特定の構成でテストが失敗する可能性がある/失敗する必要があることを示す方法は?変更された名前空間(ObjectContextなど)はどうですか?この競合を解決するには、#ifディレクティブを使用する必要がありますか?新しいEFリリースで、以前のバージョンとの互換性を損なう機能を実装する必要がある場合はどうなりますか?現時点では本当に不確かです。

4

1 に答える 1

2

http://entityframework.codeplex.com/でEF6コードベースを見てください。EF6 for .NET4および.NET4.5は、基本的に提案されている方法で、複数のビルド構成を使用してビルドします。

考慮すべき他のいくつかのポイント:

  • .NET 4.5 APIまたは動作を使用しない場合は、.NET4バージョンのみをターゲットにできる可能性があります。EntityFramework.dllの何かを使用している場合、5.0バージョンを使用するにはバインディングリダイレクトが必要になる場合がありますが、多くの場合、NuGetパッケージとして出荷すると、NuGetがこれを処理します。
  • EF6のサポートを計画している場合は、コアタイプが.NETFrameworkから移動されていることに注意してください。これは、たとえば、EF5ObjectContextがEF6ObjectContextとは異なるタイプであることを意味します。これを処理するには、プロバイダーコードを2回コンパイルして、EF6バージョンとEF5バージョンを作成する必要があります。詳細については、http://entityframework.codeplex.com/wikipage?title = Rebuilding%20EF%20providers%20for%20EF6を参照してください。
于 2012-10-23T16:34:49.150 に答える