2010-05-06 36 views
5

Tôi có một giải pháp trong Visual Studio với 5 dự án. Đó là:Tham chiếu các assembly được tạo bằng ILMerge trong các dự án Visual Studio

  • Foo.Core: Lõi chức năng
  • : Tạo mã được xây dựng trên lõi
  • Foo.Web: phần mở rộng Web cụ thể
  • Foo.Web.Mvc: MVC-cụ thể tiện ích mở rộng
  • Newtonsoft.Json: thư viện của bên thứ 3

Tôi muốn sử dụng ILMerge sáp nhập Foo.Core, và Newtonsoft.Json vào một hội duy nhất, được gọi là Foo. Đó là phần dễ dàng.

Sự cố tôi đang gặp phải là Foo.WebFoo.Web.Mvc cả hai đều cần tham chiếu cả ba trong số các hội đồng được hợp nhất.

Nếu tôi tham khảo các hội đồng gốc, chúng sẽ có các tham chiếu không hợp lệ sau khi tôi thực hiện ILMerge.

Nếu tôi tham khảo hội đồng ILMerged, tôi phải tham khảo một hội đồng gỡ lỗi và sau đó thay đổi nó trước khi tôi gói tất cả mọi thứ lên, mà không có vẻ lý tưởng.

Tôi đã thử tạo một dự án có tên là Foo, tham chiếu đến 3 hội đồng được hợp nhất và thay thế đầu ra của riêng nó bằng lắp ráp ILmerged, nhưng điều đó dường như không hoạt động.

Có cách nào đáng tin cậy để thực hiện việc này không?

Trả lời

2

ILMerge được thiết kế để tạo gói/thành phần mới như một sản phẩm đóng gói (API, Chương trình ...) để đơn giản hóa việc quản lý lắp ráp như triển khai, giới thiệu gac, khả năng hiển thị lắp ráp và nhiều hơn nữa để sử dụng tất cả trong một hoặc sử dụng bên ngoài, không pha trộn.

tôi đoán là bạn phải thiết lập một PostBuildEvent về lắp ráp/dự án chính của bạn (?) Nếu bạn có một hoặc một PreBuildEvent trong Foo.WebFoo.Web.Mvc của bạn dự án để tạo ra của bạn sáp nhập Foo sẽ được tham chiếu trong Foo.Web của bạn và Foo.Web.Mvc dự án như một hội đồng bên ngoài.

Bạn có thể thực hiện việc này tích hợp hơn trong Visual Studio bằng cách thiết lập tác vụ MsBuild. A sample (từ Stackoverflow).

+0

Vâng, tôi đã thử làm điều đó, nhưng không thể có được hiệu quả mà tôi đang tìm kiếm. Có vẻ như ILMerge sẽ cần phải được dành riêng cho một bước cuối cùng trước khi phát hành chứ không phải là một thời gian biên dịch. –

+0

Tôi nghĩ bạn có thể đạt được điều này nếu dự án của bạn được xây dựng theo đúng thứ tự. Bạn đã thiết lập các phụ thuộc dự án của bạn để đảm bảo trật tự xây dựng? – JoeBilly

3

Tôi biết mình sắp đến trễ với trò chơi, nhưng chúng tôi đã phải vật lộn với vấn đề chính xác này và đây là cách chúng tôi giải quyết nó.

Trước tiên, chúng tôi đã chỉnh sửa tệp csproj của tất cả các dự án không được hợp nhất hoặc vệ tinh để sử dụng conditional reference cho hội đồng bên ngoài dựa trên sự tồn tại của tệp. Trong trường hợp này, chúng ta sẽ kiểm tra sự tồn tại của assembly đã hợp nhất.Sau đó, chúng tôi đã chạy tập lệnh xây dựng thực hiện như sau:

  1. Xây dựng giải pháp.
  2. Chạy ILMerge trên các hội đồng chính của bạn với đầu ra là tệp trong tham chiếu có điều kiện.
  3. Xây dựng lại giải pháp, nhưng lần này vì hội đồng đã hợp nhất tồn tại, các hội đồng không hợp nhất hoặc vệ tinh giờ đây sẽ có tham chiếu chính xác.
+0

Đây là một ví dụ về khái niệm trên. hãy nhớ xem thẻ ProjectReference và Tham chiếu: https://github.com/joliver/EventStore/blob/5fce28b92fa875ea8acdfea387161abdee3c8b00/src/proj/EventStore.Persistence.RavenPersistence/EventStore.Persistence.RavenPersistence.csproj –

Các vấn đề liên quan