2010-01-09 36 views
32

làm cách nào để tạo một exe độc ​​lập trong Visual Studio. Nó chỉ là một ứng dụng Console đơn giản mà tôi nghĩ rằng người dùng sẽ không muốn cài đặt một ứng dụng Console nhỏ. Tôi đã biên soạn một tệp cpp đơn giản bằng cách sử dụng dấu nhắc lệnh phòng thu trực quan. Liệu exe có hoạt động ngay cả khi .NET framework chưa được cài đặt? Tôi đã sử dụng mã C++ gốc.Biên dịch thành tệp thực thi độc lập (.exe) trong Visual Studio

+0

Bạn có hỏi cách tạo một .exe không cần cài đặt ngay cả đối với người dùng không có thời gian chạy .NET không? – RedFilter

+2

Liệu C++ có hoạt động asveikau không? Bất kỳ bài viết về nó? –

+0

ILMerge đã được đề xuất về bài đăng trùng lặp sau này: http://stackoverflow.com/questions/3261942/net-whole-application-as-a-single-exe-file – JohnLBevan

Trả lời

19

Mọi thứ sử dụng môi trường được quản lý (bao gồm mọi thứ được viết bằng C# và VB.NET) đều yêu cầu khung .NET. Bạn có thể chỉ cần phân phối lại .EXE của bạn trong trường hợp đó, nhưng họ sẽ cần phải cài đặt khung thích hợp nếu họ chưa có nó.

+0

Tôi có thể sử dụng C++/CLI hoặc C++ gốc để biên dịch nó sang exe không? –

+1

Nó biên dịch thành một exe không có vấn đề gì. Nhưng nếu bạn cố gắng chạy nó, nó sẽ trả về lỗi nếu .NET chưa được cài đặt. – jalf

+0

Ngay cả khi sử dụng C++? –

45

Bên trong thư mục dự án của bạn là thư mục bin. Bên trong thư mục bin của bạn, có 2 thư mục, một bản phát hành và một Debug. Đối với .exe của bạn được đánh bóng, bạn muốn đi vào thư mục Release của bạn.

Tôi không hoàn toàn chắc chắn nếu đó là điều bạn yêu cầu

+2

Điều này làm việc cho tôi –

+0

Điều này làm việc cho tôi quá, không thể tin rằng bao lâu tôi đã phải tìm cho đến khi tìm thấy điều này. –

+6

Lưu ý rằng bạn sẽ phải xây dựng phiên bản Release bằng cách chọn tùy chọn Release trong Build> Configuration Manager nếu nó chưa được xây dựng. – brandaemon

3

Tôi đồng ý với @Marlon. Khi bạn biên dịch dự án C# của bạn với cấu hình Phát hành, bạn sẽ tìm thấy trong thư mục "bin/Release" của dự án của bạn thực thi ứng dụng của bạn. NÊN NÊN làm việc cho một ứng dụng đơn giản.

Nhưng, nếu ứng dụng của bạn có bất kỳ phụ thuộc nào vào một số dll bên ngoài, tôi khuyên bạn nên tạo một SetupProject với VisualStudio. Làm như vậy, trình hướng dẫn dự án sẽ tìm tất cả các phụ thuộc của ứng dụng của bạn và thêm chúng (thư mục librairies) vào thư mục cài đặt. Cuối cùng, tất cả những gì bạn cần làm là chạy cài đặt trên máy tính của người dùng và cài đặt phần mềm của bạn.

1

Tôi chưa bao giờ gặp sự cố khi triển khai ứng dụng bảng điều khiển nhỏ được thực hiện trong C#. Vấn đề duy nhất bạn có thể gặp phải sẽ phụ thuộc vào .NET framework, nhưng ngay cả điều đó cũng không phải là vấn đề lớn. Bạn có thể thử sử dụng phiên bản 2.0 của khung công tác, vốn đã có trên hầu hết các PC.

Sử dụng C++ gốc, không được quản lý, bạn không nên có bất kỳ phụ thuộc nào trên khung .NET. Vì vậy, bạn thực sự cần được an toàn. Chỉ cần lấy tệp thi hành và bất kỳ tệp đi kèm nào (nếu có) và triển khai chúng như chúng; không cần phải cài đặt chúng nếu bạn không muốn.

18

Nếu tôi hiểu chính xác, bạn có thể, nhưng không phải trong Visual Studio (từ những gì tôi biết). Để buộc trình biên dịch tạo ra một thực thi độc lập, thực tế (có nghĩa là bạn sử dụng C# giống như bất kỳ ngôn ngữ nào khác), bạn sử dụng chương trình mkbundle (được giao với Mono). Điều này sẽ biên dịch ứng dụng C# của bạn thành một thực thi không phụ thuộc thực sự.

Có rất nhiều quan niệm sai lầm về việc này trên internet. Nó không đánh bại mục đích của khuôn khổ .net giống như một số người nhà nước, bởi vì làm thế nào bạn có thể mất các tính năng tương lai của khung .net nếu bạn không sử dụng các tính năng này để bắt đầu? Và khi bạn gửi các bản cập nhật cho ứng dụng của mình, không phải là việc khó khăn để chạy nó thông qua bộ xử lý mkbundle trước khi xây dựng trình cài đặt của bạn. Ngoài ra còn có một lợi ích tốc độ liên quan làm cho ứng dụng của bạn chạy ở tốc độ bản địa (vì bây giờ nó là bản địa).

Trong C++ hoặc Delphi bạn có cùng một hệ thống, nhưng không có lớp MSIL ở giữa. Vì vậy, nếu bạn sử dụng một không gian tên hoặc sourcefile (được gọi là một đơn vị theo Delphi), sau đó nó được biên dịch và bao gồm trong nhị phân cuối cùng của bạn. Vì vậy, nhị phân cuối cùng của bạn sẽ lớn hơn (Đọc: "Bình thường" kích thước cho một ứng dụng thực tế). Cũng vậy với các phần của khung công tác mà bạn sử dụng trong .net, chúng cũng được bao gồm trong ứng dụng của bạn. Tuy nhiên, liên kết thông minh không cạo một số tiền hợp lý.

Hy vọng điều đó sẽ hữu ích!

0

Tôi không nghĩ rằng nó có thể làm những gì người hỏi hỏi đó là để tránh dll địa ngục bằng cách sáp nhập tất cả các tập tin dự án vào một .exe.

Vấn đề khung là một cá trích đỏ. Vấn đề xảy ra là khi bạn có nhiều dự án phụ thuộc vào một thư viện, nó là một PITA để giữ cho các thư viện được đồng bộ. Mỗi khi thư viện thay đổi, tất cả các .exes phụ thuộc vào nó và không được cập nhật sẽ chết khủng khiếp.

Nói cho mọi người biết C là một câu trả lời là kiêu ngạo và không biết gì.

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