2009-07-27 2 views
15

Có cách tiếp cận nào để chuyển đổi một ứng dụng được phát triển trong .NET thành một tệp thực thi nguyên gốc (các nguồn được bao gồm) không?Chuyển .NET thực thi thành native executable

Cài đặt toàn bộ khung (lên đến .NET Framework 3.5 SP1) mất nhiều thời gian - không phải lúc nào máy tính cũng được cập nhật từ internet. Có thể gọi NGen để tạo ra các tập tin thực thi độc lập không?

Cảm ơn

+0

Bạn có thể triển khai khuôn khổ với bộ cài đặt cho ứng dụng của bạn Net: http://stackoverflow.com/questions/ 626525/create-setup-project-that-includes-net-framework-3-5-sp1 – Greg

Trả lời

9

Không, mã NGen'd vẫn cần khung - nó chỉ trước mã JIT trong hội đồng của bạn. Nó cũng yêu cầu khuôn khổ cho bản thân CLR.

Tôi tin rằng Mono có trình biên dịch tĩnh mà họ đang lập kế hoạch sử dụng cho iPhone. Tôi không biết liệu điều đó có hiệu quả với Windows hay không.

Đã từng là một sản phẩm có tên Thinstall mà một số người sử dụng cho việc này. Nó bây giờ được gọi là ThinApp - về cơ bản nó là ảo hóa ứng dụng. Đó là thương mại, nhưng bạn cũng có thể có được một phiên bản dùng thử.

Cá nhân tôi muốn phần nào lo lắng về bất kỳ sản phẩm nào như vậy - khi nói đến triển khai, hãy tránh xa cách làm chủ yếu âm thanh như công thức cho nhiều cuộc gọi hỗ trợ. Có rất nhiều điều tồi tệ để đi sai. Tôi không nói nó không hoạt động, chỉ là tôi sẽ cảnh giác.

Bạn đã xem số .NET 3.5 (SP1) Client Profile chưa? Điều đó có thể giúp giảm yêu cầu cài đặt của bạn một chút.

+0

Cài đặt được mang bởi VMware và bây giờ được gọi là "ThinApp" - http://www.vmware.com/products/thinapp/ –

+0

Cảm ơn Simon - sẽ cập nhật. –

12

Chưa có, nhưng nhóm dự án Mono đang làm việc theo số Ahead of Time compiler sẽ thực hiện những gì bạn đang tìm kiếm. Mục đích là để Mono làm việc trên iPhone (như Unity) nhưng nó sẽ làm việc cho tất cả các nền tảng.

Edit: Nó không hỗ trợ Mono x86, nhưng tôi không chắc chắn nếu họ đã bao gồm các tính năng mà gói trong các lớp học phụ thuộc chưa (mặc dù từ một cuộc phỏng vấn tôi nghe, đó là kế hoạch)

Chỉnh sửa 2 : Bao gồm các phụ thuộc hiện đang được hỗ trợ, cảm ơn Dykam!

+0

Aot không hoạt động trong một thời gian. Tôi không hiểu ý bạn là gì với các lớp phụ thuộc. Nếu bạn có nghĩa là bao gồm cả dll tham chiếu, đó là chắc chắn được hỗ trợ, như bcl đã được biên dịch vào kết quả thực thi quá. Lưu ý rằng phản ánh và liên quan không có sẵn. – Dykam

+0

Cảm ơn Dykam. Nó có thể đã được tối ưu hóa rằng quá trình (tức là chỉ bao gồm các lớp học cần thiết và/hoặc phương pháp) đã được đề cập là không sẵn sàng. –

+0

FYI, tôi tin rằng cuộc phỏng vấn tôi đã đề cập là một phần của tập này của Hanselminutes: http://www.hanselminutes.com/default.aspx?showID=186 –

3

Bạn có thể sử dụng NGen để làm cho ứng dụng của bạn trở thành một tệp thực thi tự nhiên, nhưng nó vẫn sẽ phụ thuộc vào khung .Net.

+2

Tại sao điều này lại được bình chọn? Thông tin là chính xác. –

+0

Tôi nghĩ chúng ta không thể gọi nó là "thực thi nguyên gốc" trong khi "vẫn còn phụ thuộc" trên khuôn khổ .NET. – lmsasu

+2

Nó là một thực thi nguyên bản ở chỗ nó chứa mã nguồn gốc, nhưng nó vẫn có phụ thuộc vào các thư viện bên ngoài. –

3

NGen biên dịch exe thành exes gốc, vì vậy chúng không cần phải được JIT biên dịch khi chúng được chạy. Họ vẫn còn phụ thuộc vào khuôn khổ mặc dù.

Có một vài công ty thương mại cung cấp các sản phẩm để biên dịch các hội đồng .net thành các exe độc ​​lập. Xenocode và vmware's Thinapp. Mặc dù không rẻ.

1

Một số Obfuscators làm điều này, bạn sẽ phải làm điều đó trước khi mặc dù (trước khi bạn gửi nó cho người dùng của bạn). Ví dụ là remotesoft's Salamander.

1

Bạn sẽ chỉ cần cài đặt phiên bản .NET mà bạn đang nhắm mục tiêu, ví dụ: .NET1.1 hoặc .NET2.0

Chỉnh sửa: Nếu bạn cần nhắm mục tiêu phiên bản 3.5, bạn sẽ cần cài đặt cả 2.0 và 3.5

ILMerge (miễn phí) có thể kết hợp nhiều cụm thành một, nhưng tôi không nghĩ rằng nó hoạt động với các thời gian chạy cốt lõi.

Tóm lại, tôi nghĩ rằng nếu bạn muốn chạy các chương trình .NET, bạn sẽ cần .NET Framework được cài đặt.

+0

.NET 3.5 là các thư viện nằm trên khuôn khổ .NET 2.0. – ZippyV

+0

Có, tôi nghĩ rằng bạn là đúng 1.1 và 2.0 là riêng biệt nhưng 3.5 thêm thư viện bổ sung để 2.0 – Frozenskys

1

Có một sản phẩm thương mại mà tuyên bố để làm điều đó ở đây:

http://www.xenocode.com/Obfuscator/

"ứng dụng triển khai .NET một cách an toàn, không có .NET Framework cài đặt"

Không biết những hạn chế của việc này là gì mặc dù

+1

Giá? lol. –

+0

Có lẽ! Tôi không muốn tạo một thông tin đăng nhập chỉ để tìm hiểu giá là gì, vì vậy nó phải rất nhiều. –

1

Các sản phẩm duy nhất chúng tôi thành lập để giải quyết vấn đề trong năm 2007 là Xenocode Postbuild. Từ thời điểm đó, chúng tôi sử dụng thành công sản phẩm này, chúng tôi cũng sử dụng các tính năng ảo hóa khá tốt của nó.

Vấn đề duy nhất là phiên bản chúng tôi mua không hỗ trợ Windows 7 (nơi bạn không cần phải cài đặt .net framework để chạy chương trình của bạn được biên dịch với phiên bản < 4.0). Vì vậy, tôi đã viết cho Xenocode. Họ đã trả lời

Để có được sự hỗ trợ cho Win 7 bạn nên nâng cấp lên phiên bản mới nhất của Postbuild (bây giờ gọi là .NET Obfuscator). Win 7 không phải là nền tảng được hỗ trợ cho Postbuild 2007.