2015-09-18 18 views
14

TL; DR: các tùy chọn hiện nay để chạy giải pháp VS2015 trên Linux là gì?Chạy ứng dụng .NET trong Linux vào năm 2015


Tôi có ứng dụng .NET chạy tốt trong Windows và đã nhận được yêu cầu chuyển nó sang Linux. Tôi đã cố gắng rất nhiều để hiểu những gì nó có nghĩa là ngày hôm nay trong năm 2015 nhưng tôi thực sự bối rối với tất cả các bài viết cũ trỏ đến Mono và các bài viết mới nói về vNext (và vẫn đề cập đến Mono). Ngoài ra tôi có nền tảng ổn định với .NET nhưng tôi không biết nhiều về Linux nói chung ...

Tôi đã làm theo hướng dẫn gần đây và quản lý để biên dịch và chạy ứng dụng bảng điều khiển Hello World trong Linux. Điều đó đòi hỏi một số cài đặt các thứ tôi không biết, bao gồm Mono, và sau đó chạy một số lệnh "k" (kpm restore, kpm build, k run). Tuy nhiên bây giờ tôi không biết làm thế nào để chuyển sang kịch bản trường hợp thực tế của tôi.

tôi có một giải pháp VS2015 trong đó có rất nhiều dự án nhưng chỉ có 4 trong số đó đáng nói ở đây: - CommonStuff - ServiceCore - ServiceWindows/ServiceConsole

Tất cả các mã trong dự án ServiceCore (thư viện lớp) , bản thân nó có một tham chiếu đến CommonStuff (một thư viện lớp khác). ServiceWindows là một dự án dịch vụ Windows mà chỉ đơn giản gọi các chức năng chính của ServiceCore, và ServiceConsole làm điều tương tự nhưng trong một ứng dụng giao diện điều khiển (vì lý do gỡ lỗi, vì nó không thể gỡ lỗi một dự án dịch vụ Windows từ Visual Studio).

Cả hai CommonStuff và ServiceCore bao gồm rất nhiều thư viện .NET cũng như một số dll của bên thứ ba. Tuy nhiên, không có mã cụ thể của Windows, không có thứ pinvoke hoặc funky.

Nếu chúng ta xem ServiceConsole để trở thành ứng dụng tôi muốn chạy trên Linux - tôi cần phải làm gì để làm cho nó xảy ra? Biên dịch Hello World là một điều nhưng bây giờ, với tất cả các tài liệu tham khảo tiếng Pháp ... Tôi không biết bắt đầu từ đâu. Ngoài ra, tôi thậm chí không thể có mã được biên dịch trong Linux (mã độc quyền) vì vậy tôi cần mã được biên dịch trong Windows và dll/exe được biên dịch để chạy trực tiếp trong Linux - đó là điều có thể? Tôi đã thấy một vài bài viết nói rằng Mono có thể chạy các ứng dụng được biên dịch, nhưng mỗi và mọi giai điệu Mono tôi đã thấy bắt đầu bằng việc biên dịch. Ngoài ra tôi không chắc chắn vNext này là gì. Tôi đọc công cụ về khả năng chạy mã trong Linux nếu nó được nhắm mục tiêu cho .net 6 ... nhưng tôi không biết ý nghĩa của nó.

Tôi sẽ đánh giá rất cao nếu ai đó có thể dành chút thời gian để giải thích chi tiết những lựa chọn hiện tại và nếu nó thực tế cho một ứng dụng chuyên nghiệp hoặc nó chỉ tốt cho Hello World.

Cảm ơn

EDIT: Ok như vậy có vẻ như tôi có thể biên dịch mã của tôi trong VS và bằng cách nào đó chạy nó trên Linux sử dụng Mono - làm thế nào?

+1

_ "Dịch vụ Windows [...] không có gì đặc trưng cho Windows" _ không tính toán. Xem [Cách di chuyển ứng dụng .NET Service sang Linux bằng cách sử dụng mono?] (Http://stackoverflow.com/questions/637948/how-to-migrate-a-net-windows-service-application-to-linux- sử dụng-mono). vNext hoặc ASP.NET 5 là điều tiếp theo cho các ứng dụng web, vì vậy không liên quan đến tình huống của bạn. Tôi không thể giúp bạn nhiều hơn thế, tôi đã không cố gắng chạy .NET trên Mono ngoài "Hello, World!" cũng. – CodeCaster

+0

Tôi mã .Net/Mono hướng dịch vụ ứng dụng trên OS-X và triển khai kết quả CILs cho Windows và Linux nền tảng tất cả các thời gian ... Câu hỏi này là như vậy chung rằng nó không thể được trả lời trực tiếp. Là Mono một nền tảng CLR khả thi để chạy các ứng dụng xplat, vâng ... Ngoài 'Hello World', vâng, các ứng dụng chuyên nghiệp? vâng, tất nhiên, vv .. Câu trả lời thực sự sẽ dựa trên ứng dụng của bạn, mã của bạn, trải nghiệm người dùng yêu cầu, yêu cầu nền tảng, v.v. Bạn đã nói rằng bạn không sử dụng InterOp không được quản lý, nhưng mã cụ thể của Windows, nếu có, Dịch vụ của bạn đang sử dụng, v.v ... – SushiHangover

+0

Tôi không nghĩ rằng nó quan trọng đến mức nó là một dịch vụ Windows. Nó chỉ là một số mã mà tôi chạy như một dịch vụ Windows, nhưng như tôi đã nói, nó có thể được chạy như một ứng dụng giao diện điều khiển. Cụ thể hơn, mục đích của ứng dụng là để chờ đợi các yêu cầu (nhận được thông qua SignalR, do đó, websockets hoặc polling dài) và sau đó kết nối với một số cơ sở dữ liệu (ví dụ mysql, được quản lý bởi dlls bên thứ 3) để gửi dữ liệu đến một webservice của chúng ta. Điều duy nhất Windows đặc trưng là ghi vào nhật ký Windows nhưng tôi có thể thay thế dễ dàng bằng cách ghi vào một số tệp cho Linux. – Nicolas

Trả lời

14

Tôi thường phát triển các ứng dụng phức tạp đa nền tảng hoặc chỉ sử dụng Linux, sử dụng Visual Studio 2015 trên cửa sổ. Bạn chỉ có thể biên dịch nó trong VS, sao chép vào Linux và chạy - hầu như luôn luôn điều này sẽ chỉ hoạt động. Nếu bạn phát triển nghiêm túc, bạn có thể muốn biên dịch dưới dạng đơn để phát hiện một số phương thức còn thiếu \ chữ ký khác nhau, nhưng đó không phải là yêu cầu.

Giờ đây, dịch vụ cửa sổ có thể được thay đổi thành ứng dụng giao diện điều khiển. Về cơ bản nó chỉ là ứng dụng giao diện điều khiển được quản lý bởi công cụ bên ngoài. Trên linux có các công cụ khác nhau cho phép bạn quản lý (bắt đầu \ stop \ khởi động lại trên thất bại và vv) các ứng dụng "dịch vụ" của bạn.

Đối với các ứng dụng web, tôi thường sử dụng ServiceStack, chạy trên đơn mà không gặp sự cố. Bạn thậm chí có thể tự lưu trữ nó một lần nữa như ứng dụng giao diện điều khiển, phía sau nginx. Bạn cũng có thể lưu trữ các ứng dụng asp.net theo apache \ nginx, với ít hoặc không có thay đổi mã. Nửa năm trước, tôi "chuyển" dự án lớn được phát triển trong 2 năm từ cửa sổ máy chủ đến CentOS 7 máy chủ, chủ yếu là chỉ sao chép các công cụ để centos và chạy (với rất ít thay đổi, mà không biên dịch lại dưới mono). Tất nhiên dự án đó có nhiều phụ thuộc của bên thứ ba, và một số nhà phát triển của những người phụ thuộc đó thậm chí không biết mono tồn tại. Tuy nhiên họ chỉ làm việc. Và giải pháp đó có khoảng 90 dự án VS.

Tất nhiên, không phải mọi dự án phức tạp đều dễ dàng chuyển đến cổng, đặc biệt nếu bạn thường xuyên sử dụng thư viện gốc, nhưng thường thì không phải như vậy. Ngoài ra, nếu bạn làm việc với máy chủ sql, lưu ý rằng trình điều khiển máy chủ sql trong mono là khá xấu từ kinh nghiệm của tôi. Tôi sử dụng postgre và tránh máy chủ sql với mono nếu tôi có một sự lựa chọn. Làm việc với hình ảnh trong mono cũng không phải là rất tốt, lỗi và không ổn định. Tôi tránh sử dụng Bitmap lớp ở tất cả các chi phí và pinvoke vào imagemagick C api thay thế. Nhưng bạn cần phải làm ở đó chỉ khi bạn làm hình ảnh nghiêm túc và phong phú, cho các nhiệm vụ cơ bản thì tốt.

Ứng dụng .NET ngắn hạn trong Linux năm 2015 không phải là vấn đề hiện nay.

+0

"Bạn chỉ có thể biên dịch nó trong VS, sao chép vào Linux và chạy "- Tôi có thể biên dịch trong VS và sao chép vào Linux - nhưng làm thế nào chính xác để tôi chạy? Tôi cần chạy lệnh nào? Bạn có thể cho biết thêm chi tiết? – Nicolas

+0

Chỉ cần cài đặt Mono. Tôi không thực sự chắc chắn vấn đề của bạn là gì? – user9993

+0

@Nicolas, Cài đặt mono, sau đó thực hiện "mono YourConsoleApp.exe". Nếu bạn muốn chạy dưới dịch vụ quản lý, chỉ cần đọc làm thế nào để chạy bất kỳ ứng dụng dưới nó (không liên quan đến mono). – Evk

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