2012-02-08 23 views
5

Tôi có gói Visual Studio thực hiện một số công việc của mình bằng cách bắt đầu một quy trình bên ngoài (sử dụng System.Diagnostics.Process) và liên lạc với nó qua đầu vào/đầu ra tiêu chuẩn. Hiện tại, tôi có đường dẫn đến mã hóa cứng .exe rõ ràng là không thể thực hiện được để triển khai tiện ích mở rộng. Cách đúng để đóng gói và phân phối .exe với tiện ích mở rộng là gì? (Và, liên quan, một khi tôi đã làm như vậy, làm thế nào để lập trình khám phá đường dẫn đến tập tin cài đặt .exe.) Tốt hơn tôi muốn đặt nó vào tập tin .vsix để cài đặt dễ dàng.Gói .exe vào .vsix và gọi từ phần mở rộng Visual Studio

EDIT: tôi đã đặt các phần có liên quan của mã của tôi trên BitBucket (nó có thể hữu ích cho người khác sử dụng Roslyn): roslyn_process để cung cấp cho một ý tưởng tốt hơn về những gì tôi đang cố gắng làm. Mã này thiết lập giao tiếp giữa một phần mở rộng Visual Studio bằng cách thực hiện AbstractProcessHandler và một quá trình riêng biệt sử dụng RoslynProcess. Sau này được giữ thông báo về sửa đổi các tệp mã trong Visual Studio và tệp mã nào đang được xem, do đó, nó có thể phân tích với thông tin cập nhật mặc dù không chạy dưới dạng tiện ích mở rộng Visual Studio sẽ áp đặt các giới hạn của Roslyn trên tất cả các mã đang được chỉnh sửa.

CHỈNH SỬA 2: Sử dụng this answer, tôi có thể nhận được thư mục của tiện ích. Tôi có thể bao gồm một gói khác trong source.extension.vsixmanifest bằng cách thêm nó vào danh sách nội dung dưới dạng "Loại tiện ích mở rộng tùy chỉnh". Sau đó, .exe xuất hiện trong thư mục của tiện ích. Điều này có vẻ như nó có thể là giải pháp đúng mặc dù cách nhận được thư mục được dán nhãn trong MSDN như một cái gì đó tôi không nên sử dụng. Có vẻ như đây có thể là cách tốt nhất để làm điều này mặc dù nó có vẻ bị hack, trong trường hợp này tôi sẽ đăng bài này như một câu trả lời khi tôi nhận được mọi thứ hoạt động.

+1

@Kiquenet: Rất tiếc, tôi không có giải pháp tối thiểu được đóng gói gọn gàng ... nhưng câu trả lời được chấp nhận là một lớp lót. – perelman

Trả lời

5

Một trong những cách tiếp cận đơn giản nhất là DLL của gói của bạn có tham chiếu dự án tới EXE và làm cho lớp điểm vào của bạn (hoặc một số lớp trong EXE) được công khai. Sau đó, bạn chỉ có thể viết:

typeof(ExternalProcess).Assembly.Location 

cung cấp cho bạn đường dẫn đến EXE bên trong đường dẫn tiện ích.

Một phần hay khác về việc này là trình đóng gói VSIX nên bao gồm EXE vào VSIX tự động vì đó là tham chiếu dự án. Bạn không cần phải đặt bất cứ điều gì cả trong .vsixmanifest của bạn cho EXE.

+0

Bởi vì khi tôi đã thử điều này: bao gồm một EXE (tham chiếu NancyFX), nó nói với tôi rằng NancyFX không mạnh mẽ tên, và xây dựng không thành công. –

+0

"Nó" là gì? Trong mọi trường hợp, bắt đầu một câu hỏi khác ở đây là thích hợp hơn nhiều so với một cuộc trò chuyện về điều này. –

+0

Tôi không có câu hỏi - Tôi có báo trước: Khi bạn tạo VSPackage bằng cách sử dụng SDK VS 2012, mẫu sẽ tạo dự án có bật đặt tên mạnh. Nếu bạn đề cập đến bất cứ điều gì khác trong dự án đó, nó cần phải được đặt tên mạnh mẽ, bởi vì đặt tên mạnh là transitive. –

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