5

상당히 큰 프로젝트를위한 스크립트를 작성하는 중입니다. 프로젝트 중 하나는 엔티티 프레임 워크 모델을 라이브러리로 컴파일해야합니다. 빌드 서버가 작동하는 방식으로 인해 모든 빌드는 개발자와 프로젝트 파일에 영향을주지 않으면 서 다양한 배포 시나리오를 관리하기 위해 손으로 제작됩니다.MSBuild를 사용하여 프로젝트 파일을 사용하지 않고 Entity Framework 모델을 작성 하시겠습니까?

Visual Studio에서 생성 한 프로젝트 파일을 사용하지 않고 MSBuild 작업을 사용하여 EF 모델을 생성 할 수 있습니까? 현재 실제 어셈블리는 CSC 작업을 사용하여 컴파일되지만 EF 모델은 컴파일 된 어셈블리에 포함되어 있지 않기 때문에 실제 배포 된 응용 프로그램은 실패합니다.

목표 또는 빌드 작업을 사용하여 모델을 생성하고 어셈블리에 포함 할 필수 리소스를 만드는 데 사용할 수있는 포인터가 있습니까? 배포시 프로젝트에 할 필요가 다양한 변화가 그대로

, 옵션이 아닌 프로젝트 그러나 빌드 서버에 프로젝트 파일을 사용하여 Visual Studio에서 잘 컴파일

주의 사항 , 이것은 개발 팀 통제 외부의 사용자 정의 빌드 스크립트를 통해 제어됩니다. 이것은 몇 가지 프로젝트에서 성공적으로 수행되었지만 EF 모델은이 특정 시나리오에서 두통을 유발합니다.

업데이트

현재의 솔루션은 적합하지 않습니다 만 작동합니다. 새 릴리스 빌드에서 프로젝트의 폴더로 EF 모델 리소스를 복사하도록 프로젝트 파일이 수정 된 다음 소스 제어로 체크 인됩니다. 빌드 스크립트가 서버에서 실행되면 EF 모델이 어셈블리에 포함됩니다. 이 순간에 해결할 수있는 해결 방법 인 것 같습니다.

답변

4

내 프로젝트의 소스 트리가 출력 dll에 리소스를 생성하고 포함하는 Entity Framework의 빌드 작업을 실행하기 위해 제대로 설정되지 않아서 실제로이 문제를 처리했습니다. 당신이 메모장에서 .csproj 파일을 열 경우

<EntityDeploy Include="MyEntities.edmx"> 
    <Generator>EntityModelCodeGenerator</Generator> 
    <LastGenOutput>MyEntities.Designer.cs</LastGenOutput> 
</EntityDeploy> 

이 같은 XML의 비트를 참조한다 EntityDeploy의 MSBuild를 작업

를 사용

:

나는 다음과 같은 옵션을 조사 는 사용하는 msbuild 작업입니다. Microsoft.Data.Entities.Build.targets 및 Microsoft.Data.Entities.Build.dlledmx 파일을 읽고 ssdl, csdl 및 msl 파일을 생성 한 다음 대상 dll에 파일을 포함 시키려면을 입력하십시오. 이러한 파일은 C : \ Windows \ Microsoft.NET \ Framework \ v3.5에서 찾을 수 있습니다. 크레이그는 지적 EdmGen

를 사용

, 당신은 프레임 워크와 EdmGen.exe하는 선박을 사용할 수 있습니다. 나는 그것을 줬다. 그러나 나는 edmx 파일의 데이터에 약간의 커스터마이제이션을했고 EdmGen.exe는 원래 데이터베이스에서 초기 생성을 실제로하고 싶어하는 것 같다.EdmGen2

EdmGen2.exe를 사용

EdmGen보다 조금 더 않는 오픈 소스 프로젝트입니다. 나는 그것을 사용하여 ssdl, csdl, msl 파일을 생성했다. edmx 파일을 가리키면 필요한 ssdl, csdl 및 msl 파일이 생성됩니다. 그때 내 DLL과 함께 다음을 포함

connectionString="metadata=./MyEntities.csdl|./MyEntities.ssdl|./MyEntities.msl; 

주 내가 이러한 파일 내 DLL과 같은 디렉토리에있는 엔티티 프레임 워크를 말하고에

connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|res://*/MyEntities.msl; 

에서 연결 문자열을 수정 포함되지 자원으로.

이 세 가지 모두 빌드 작업 인 EdmGen과 EdmGen2는 모든 어려운 작업에 대해 System.Data.Entity.dll을 호출하는 씬 래퍼입니다. 최후의 수단으로 리플렉터의 dll 빌드 작업을 엿보고 그것이 무엇을하는지 볼 수 있습니다.

희망이 도움이됩니다.

1

예,이 작업을 수행 할 수있는 EdmGen이라는 명령 줄 유틸리티가 있습니다. 가능한 스위치는 EdmGen /?을 사용하십시오.