2012-10-12 3 views
0

무료 (오픈 소스) Entity Framework 도구를 개발 중입니다. ADO.NET 공급자는 근본적이지만 일부 상위 추상화도 사용합니다 (예 : ObjectContext , EntityConnection). 거의 모든 EF (EF4 = <)의 레거시 버전을 지원하고 싶습니다. EF5가 나올 때까지 .NET40만을 대상으로 개발할 수 있었기 때문에 매우 쉽습니다.레거시 지원이있는 Entity Framework 기반 도구의 다중 대상 개발

EF5는 새로운 기능 중 일부에서 .NET45 프레임 워크가 필요하기 때문에 작업을 더욱 복잡하게 만들었습니다. 반면 EF5는 .NET40도 지원합니다. 그 위에 EF는 이제 .NET 프레임 워크와 독립적으로 개발되었습니다.

현재로서는 .NET40과 .NET45를 모두 대상으로하는 것은 피할 수없는 일입니다. 그러나 현재 독립적으로 개발 된 EF를 준수 할 수있는 다중 타겟 환경을 설정하는 가장 좋은 방법은 무엇인지 모릅니다. 나는 또한이 문제에 대한 좋은 문서를 찾지 못했다.

여러 개의 솔루션 파일을 사용해야합니까? 여러 프로젝트 파일? 다중 솔루션 구성? EF의 모든 버전을 어떻게 든 참조 할 수 있습니까? 범용 빌드 스크립트를 만드시겠습니까? 그렇다면 어떻게? 다른 구성에 대해 단위 테스트를 실행하는 방법은 무엇입니까? 특정 구성에서 테스트가 실패 할 수 있음을 나타내는 방법은 무엇입니까? 변경된 네임 스페이스 (예 : ObjectContext)는 어떻게됩니까? 이 충돌을 해결하기 위해 #if 지시문을 사용해야합니까? 새 EF 릴리스에서 이전 버전과의 호환성을 손상시키는 기능을 구현해야하는 경우 어떻게해야합니까? 나는이 시점에서 정말로 불확실하다.

+0

내 생각에 지금은 여러 빌드 구성을 사용해야합니다. 적절한 PropertyGroup 및 ItemGroup XML 자식 요소를 csproj 파일에 수동으로 편집/추가해야합니다. 이 방법으로 각 구성에 대해 참조 된 DLL의 대상 프레임 워크 나 힌트 경로를 변경할 수 있습니다. 더 좋은 제안이 있습니까? – tamasf

답변

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
+0

답변 해 주셔서 감사합니다. 한 가지 질문이 내 마음에 들었습니다. EF6 용 라이브러리를 별도로 컴파일해야한다면 NuGet 게시 구성이 무엇이 좋을까요? AFAIK Nuget은 대상 프레임 워크 (NuGet 패키지 관리자의 .net, windows, silverlight, wp 폴더)를 기반으로 적절한 라이브러리를 선택할 수 있습니다. – tamasf

+0

이것은 NuGet 팀과 이야기 할 때 필요한 것입니다. 지금 가장 좋은 대답은 무엇인지 모르겠습니다. –

+0

EF6 용으로 별도의 NuGet 패키지를 만드는 것이 가장 좋습니다. 그러나 이것은 아주 우아하지 않습니다. 좋은 해결책을 찾길 바랍니다. 이 문제가 해결되면 codeplex에 게시 할 계획입니까? – tamasf

관련 문제