5

Tôi đang trong quá trình xây dựng kịch bản cho một dự án khá lớn. Một trong các dự án yêu cầu một mô hình khung thực thể được biên dịch thành một thư viện. Do cách máy chủ xây dựng hoạt động, tất cả các bản dựng được tạo thủ công để quản lý các kịch bản triển khai khác nhau mà không ảnh hưởng đến các nhà phát triển và các tệp dự án.Sử dụng MSBuild để xây dựng Mô hình khung thực thể mà không cần sử dụng tệp dự án?

Có cách nào để tạo Mô hình EF bằng cách sử dụng tác vụ MSBuild mà không sử dụng tệp dự án do Visual Studio tạo không? Hiện tại, lắp ráp thực tế biên dịch bằng cách sử dụng một nhiệm vụ CSC, tuy nhiên ứng dụng được triển khai thực tế không thành công vì Mô hình EF không được bao gồm trong assembly được biên dịch.

Bất kỳ con trỏ nào trong đó Mục tiêu hoặc Công việc xây dựng có thể được sử dụng để tạo mô hình và tạo các tài nguyên cần thiết để nhúng trong hội đồng?

Xin lưu ý

Dự án biên dịch tốt trong Visual Studio, tuy nhiên sử dụng hồ sơ dự án trên máy chủ xây dựng không phải là một lựa chọn, như có những thay đổi khác nhau mà cần phải được thực hiện để dự án tại thời điểm triển khai , và điều này được kiểm soát thông qua một kịch bản xây dựng tùy chỉnh bên ngoài các nhóm phát triển kiểm soát. Điều này đã làm việc thành công cho một vài dự án, tuy nhiên Mô hình EF đang gây ra một số cơn đau đầu trong kịch bản cụ thể này.

Cập nhật

Giải pháp hiện nay là không lý tưởng nhưng hoạt động. Tệp Dự án đã được sửa đổi để sao chép tài nguyên Mô hình EF vào một thư mục trong dự án trên bản xây dựng bản phát hành mới, sau đó được kiểm tra vào kiểm soát nguồn. Khi kịch bản xây dựng chạy trên máy chủ, các mô hình EF được nhúng vào trong assembly. Điều này có vẻ là một giải pháp khả thi cho thời điểm này.

Trả lời

4

Tôi thực sự đã xử lý điều này ngay hôm nay vì cây nguồn của dự án của tôi không được thiết lập đúng cách để chạy tác vụ xây dựng của khung thực thể tạo và nhúng tài nguyên trong dll đầu ra.

tôi điều tra các tùy chọn sau:

Sử dụng msbuild nhiệm vụ EntityDeploy

Nếu bạn mở file csproj của bạn trong notepad bạn sẽ thấy một chút của XML như

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

này là tác vụ msbuild sử dụng Microsoft.Data.Entities.Build.targetsMicrosoft.Data.Entities.Build.dll để đọc tệp edmx, tạo tệp ssdl, csdl và msl rồi nhúng chúng vào dll đích. (Các tệp này có thể được tìm thấy trong C: \ Windows \ Microsoft.NET \ Framework \ v3.5).

Sử dụng EdmGen

Như Craig chỉ ra, bạn có thể sử dụng EdmGen.exe mà tàu với khuôn khổ. Tôi đã cho rằng một đi nhưng tôi đã làm một chút tùy biến cho các dữ liệu trong tập tin edmx của tôi và EdmGen.exe dường như thực sự muốn làm thế hệ ban đầu từ cơ sở dữ liệu gốc.

Sử dụng EdmGen2

EdmGen2.exe là một dự án mã nguồn mở mà không nhiều hơn một chút so với EdmGen. Tôi đã sử dụng nó để tạo ra các tệp ssdl, csdl và msl. Bạn chỉ có thể trỏ nó vào tệp edmx của bạn và nó sẽ tạo ra các tệp ssdl, csdl và msl cần thiết. sau đó tôi bao gồm những bên cạnh dll của tôi và sửa đổi các chuỗi kết nối từ

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

để

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

Lưu ý tôi nói với khuôn khổ Entity rằng những tập tin nằm trong thư mục tương tự như dll của tôi, không được nhúng như tài nguyên.

Tất cả ba trong số này, tác vụ xây dựng, EdmGen và EdmGen2 là trình bao bọc mỏng gọi System.Data.Entity.dll cho tất cả các công cụ khó. Như một phương sách cuối cùng bạn có thể nhìn vào dll xây dựng nhiệm vụ trong phản xạ và xem những gì nó đang làm.

Hy vọng điều này sẽ hữu ích.

1

Có, có một tiện ích dòng lệnh được gọi là EdmGen có thể thực hiện việc này. Sử dụng EdmGen /? cho các công tắc có thể.