2010-06-17 4 views
8

Tóm tắtLàm cách nào để gỡ lỗi vào một hội đồng được ILMerg?

Tôi muốn thay đổi quá trình xây dựng một giải pháp 2-lắp ráp, như vậy mà một cuộc gọi đến ILMerge được gọi, và xây dựng kết quả trong một hội duy nhất. Hơn nữa tôi muốn có thể gỡ lỗi vào lắp ráp kết quả.

Chuẩn bị - Một ví dụ đơn giản

  1. Giải pháp mới - ClassLibrary1
  2. Tạo một hàm tĩnh 'GetMessage' trong Class1 mà trả về chuỗi "Hello world"
  3. Tạo ứng dụng giao diện điều khiển mới mà tài liệu tham khảo ClassLibrary.
  4. Xuất GetMessage từ main() thông qua bảng điều khiển.

Bây giờ bạn có một ứng dụng lắp ráp 2 kết quả là "Hello World" cho bảng điều khiển.

Vậy điều gì tiếp theo ..?

Tôi muốn thay đổi Console quá trình ứng dụng xây dựng, bao gồm một bước bài xây dựng trong đó sử dụng ILMerge, để hợp nhất lắp ráp ClassLibrary vào lắp ráp điều khiển

Sau bước này, tôi sẽ có thể:

  • Chạy ứng dụng điều khiển trực tiếp với không ClassLibrary1.dll hiện
  • Chạy ứng dụng điều khiển thông qua F5 (hoặc F11) trong VS và có thể gỡ rối vào nhau của 2 dự án.

TNHH Success

tôi đọc this blogpost và quản lý để đạt được merge tôi là sau khi có một hậu build lệnh của ...

"$(ProjectDir)ILMerge.bat" "$(TargetDir)" $(ProjectName) 

... và một ILMerge. tập tin bat đọc ...

CD %1 
Copy %2.exe temp.exe 
ILMerge.exe /out:%2.exe temp.exe ClassLibrary1.dll 
Del temp.exe 
Del ClassLibrary1.* 

Điều này hoạt động khá tốt và thực tế là chuyên nghiệp duce một exe chạy bên ngoài môi trường VS theo yêu cầu. Tuy nhiên nó không xuất hiện để tạo ra các biểu tượng (tệp .pdb) mà VS có thể sử dụng để gỡ lỗi vào mã.

Tôi nghĩ đây là phần cuối cùng của câu đố.

Có ai biết cách tôi có thể thực hiện tác phẩm này không?

FWIW Tôi đang chạy VS2010 trên máy x64 Win7 x64.

Cập nhật: Tại sao tôi muốn thực hiện việc này?

Đã được hỏi: 'Tôi có thực sự cần ILMerge trong trường hợp gỡ lỗi không?'

Các hội của giải pháp của tôi sẽ cần phải cùng tồn tại trong cùng một thư mục như những giải pháp khác (một số trong đó tôi có khả năng sẽ phát triển)

Một số các giải pháp này sẽ chia sẻ phụ thuộc vào phiên bản khác nhau của một số hội.

Vì vậy, Solution1 có thể được tạo thành từ Console1 và ClassLibrary1.dll (v1) và Solution2 có thể được tạo thành từ Console2 và Classlibrary1.dll (v2).

Thay vì đăng ký mọi thứ trong GAC, tôi nghĩ tôi có thể ILMerge phiên bản chính xác của sự phụ thuộc vào lắp ráp chính của giải pháp để tránh va chạm.

Tuy nhiên, điều này hiện tại không thể gỡ lỗi giải pháp mà tôi cần phải thực hiện cùng với các giải pháp khác sẽ có mặt.

Âm thanh này có phức tạp không? Đó là bởi vì nó là ..: D

+0

Thay vì có tập lệnh .bat, một việc bạn có thể làm là tạo một dự án thứ ba (loại ClassLibrary sẽ hoạt động) có phụ thuộc là ConsoleApp và ClassLibrary; gọi nó là PostSolutionBuildEvents.Sau đó, có post-build của nó là một lệnh ILMerge. Bằng cách này, bạn có quyền truy cập vào tất cả các macro như '$ (SolutionDir)'. –

+1

Lưu ý: Bạn không cần phải GAC công cụ cho mục đích này, có một số lượng lớn các tùy chọn khác nhau, từ "nó chỉ hoạt động" khi không có gì là GACd để tập tin cấu hình ứng dụng –

+1

bạn đã bao giờ giải quyết này? cùng một vấn đề ở đây ... –

Trả lời

1

Tôi khuyên bạn chỉ nên ILMerge bản phát hành của các hội đồng của bạn. Tôi không thể tưởng tượng bất kỳ lợi ích bạn sẽ nhận được từ việc sáp nhập các hội đồng gỡ lỗi.

+0

Tôi đã thêm vào câu hỏi ban đầu của tôi giải thích (loại) tại sao tôi muốn làm điều này. –

+0

Về bản cập nhật của bạn, tôi nghĩ bạn đang gặp nhiều sự cố hơn khi bạn đang giải quyết bằng cách cố gắng đi tuyến đường này. Bắt đầu một câu hỏi mới bằng cách sử dụng bản cập nhật của bạn làm câu hỏi - chắc chắn có một giải pháp tốt hơn so với cách tiếp cận bạn đang cố gắng. –

+0

Tôi không chắc mình hiểu ... Bạn đang đề nghị gì? –

-1

Tôi không nghĩ rằng ILMerge có thể làm điều đó. OTOH smartassembly từ cổng đỏ (không miễn phí) có thể làm điều đó, ít nhất là nó nói tại features

Và có, tôi đồng ý với Mike chỉ sử dụng ILMerge cho các phiên bản phát hành.

4

Tôi rất tiếc vì bạn đang gặp sự cố. Tôi đã không làm theo các bước chính xác của bạn, nhưng tôi tạo ra một ứng dụng giao diện điều khiển, A.exe, mà được gọi là một phương pháp trong một dll, B.dll. Tôi xây dựng cả hai hội đồng trong chế độ gỡ lỗi (để họ có các tập tin PDB). sau đó tôi sáp nhập chúng như thế này:

ILMerge /out:foo.exe a.exe B.dll

(Thực ra A và B là trong thư mục khác để dòng lệnh của tôi là một chút phức tạp hơn , nhưng điều đó không tạo nên sự khác biệt.) Sau khi ILMerge hoàn tất, có hai tệp trong thư mục hiện tại: foo.exe và foo.pdb. sau đó tôi gõ:

devenv foo.exe

này mở ra Visual Studio và sau đó tôi nhấn "F10" để bắt đầu gỡ rối. Tôi đã có thể bước vào phương pháp chính trong thực thi và sau đó sử dụng "F11" để bước vào phương pháp trong đó ban đầu đã được trong B.dll. Kinh nghiệm gỡ lỗi chỉ giống như trong giải pháp Visual Studio gốc với hai hội đồng.

Nếu bạn vẫn gặp sự cố, hãy cảm thấy tự do để đưa toàn bộ giải pháp của bạn vào một tập tin zip và gửi nó cho tôi (mbarnett tại microsoft dot com) và tôi có thể thử nó ra.

+1

+1 để nhận phản hồi từ tác giả của ILMerge! Các tập tin .pdb kết quả là làm việc tốt cho tôi, nếu nó trong cùng một thư mục như lắp ráp hợp nhất (exe trong trường hợp của tôi). Xem câu hỏi/câu trả lời tương tự http://stackoverflow.com/questions/1439721/is-there-a-way-to-merge-pdb-files-with-ilmerge – joelsand

+0

Nó hoạt động vì bạn không đổi tên công cụ (xem câu trả lời của tôi) . –

0

Tôi đã cố gắng làm điều gì đó như thế này và thấy rằng bạn không nên đổi tên bất cứ điều gì, trước cả sau khi hợp nhất. Di chuyển công cụ đến thư mục riêng biệt là tốt. Nếu bạn không đổi tên bất cứ điều gì, nó hoạt động.