Có cách nào được hỗ trợ để chạy các ứng dụng .NET 4.0 trên máy Mac không?


11

Điều gì, nếu có, là các tùy chọn được Microsoft hỗ trợ để chạy mã C # /. NET 4.0 nguyên bản trên máy Mac? Vâng, tôi biết về Mono, nhưng trong số những thứ khác, nó thua Microsoft. Và Silverlight chỉ hoạt động trong một trình duyệt web. Một giải pháp loại VMWare sẽ không cắt nó.

Có câu trả lời bán chính thức nào cho lý do tại sao Microsoft không hỗ trợ .NET trên máy Mac không? Có vẻ như họ có thể Silverlight và / hoặc mua Mono và nhanh chóng có mặt ở đó. Không cần Visual Studio bản địa; biên dịch chéo và gỡ lỗi từ xa là tốt.

Lý do là nơi tôi làm việc có sự không chắc chắn ngày càng tăng về tương lai, điều này gây ra sự phát triển hơn rất nhiều trong C ++ thay vì C #; các dự án hoàn toàn mới đang chọn sử dụng C ++. Không ai muốn nói với quản lý 18 tháng 24 tháng kể từ bây giờ "xin lỗi" nếu Mac (hoặc iPad) trở thành một yêu cầu. C ++ được xem là lựa chọn an toàn hơn, ngay cả khi nó (có thể nói là) có nghĩa là mất năng suất ngày nay.


2
Được hỗ trợ bởi ai?

Tại sao bạn thực sự quan tâm nếu MS hỗ trợ nó? IMO sẽ quan trọng hơn nếu Apple hỗ trợ nếu bạn muốn nhắm mục tiêu Mac.
thay thế

Đi với C ++ không phải là một ý tưởng tồi. Bạn có thể có một cơ sở mã di động và sử dụng GUI gốc trên mỗi nền tảng.
mike30

1
Để cập nhật bài đăng này, có vẻ như MS đã chú ý và họ sẽ bắt đầu hỗ trợ .NET trên các hệ điều hành khác nhau mặc dù không rõ điều này sẽ được thực hiện như thế nào. Bạn có thể tạo các ứng dụng đa nền tảng với .NET bằng NOV: nevron.com/products-open-vision.aspx (Tôi làm việc cho công ty này). Nó thường cho phép bạn viết mã bằng C # trên windows và sau đó biên dịch cho Wpf, MAC, Silverlight và sớm cho iOS và Android. Có một phiên bản (cộng đồng) miễn phí của sản phẩm này vì vậy không cần phải hy sinh năng suất và gắn bó với C ++ phức tạp.
Bob Milanov

Câu trả lời:


17

Có câu trả lời bán chính thức nào cho lý do tại sao Microsoft không hỗ trợ .NET trên máy Mac không?

Câu trả lời tốt nhất có lẽ là bạn không "chỉ hỗ trợ" .NET trên Mac. Bạn chi hàng trăm triệu đô la và vài năm chuyển .NET sang Mac.

Mặc dù một số thứ được quản lý hoàn toàn và không yêu cầu chuyển, nhưng hầu hết mọi thứ là các hàm bao quanh API Win32 (windows, controls, gdi +, mật mã, thư mục hoạt động, COM, dịch vụ doanh nghiệp, truy cập thiết bị, âm thanh, video, codec, winforms, v.v. Vân vân).

Mỗi một trong số này sẽ phải được trừu tượng hóa trong phần phụ trợ và ánh xạ vào các thư viện gốc tương đương trên OSX. Tất nhiên, sẽ không có một bản đồ sạch đẹp, vì vậy bạn cũng phải viết các bản hack trên các bản hack để làm cho nó hoạt động giống hệt nhau.

Sau đó, có một vấn đề là các API này trên OSX có thể dễ vỡ và Apple không tốt về khả năng tương thích ngược, vì vậy bạn có thể làm lại các bản hack của mình với mỗi bản phát hành chính (và đôi khi là bản phát hành nhỏ và hotfix), làm tăng chi phí bảo trì cao.

Về cơ bản, đó là một số tiền khổng lồ và hoạt động để kiếm được rất ít trên nền tảng mà chủ sở hữu sẽ chống lại bạn bằng mọi cách. Và bạn không thực sự muốn chi tiền để giúp mọi người di chuyển khỏi nền tảng của bạn sang đối thủ cạnh tranh.

Vì vậy, bạn còn lại với các lựa chọn đa nền tảng không hoàn hảo:

  • C ++, vẫn sẽ yêu cầu chuyển trong tương lai
  • Silverlight ra khỏi trình duyệt, để được Microsoft hỗ trợ
  • Mono, hoạt động để hỗ trợ một tập hợp con lành mạnh của .NET, nhưng không phải là Microsoft

5
You spend hundreds of millions of dollars and several years porting .NET to the Mac.Xin lỗi? Con số đó nghe có vẻ hơi cao ... Tôi khá chắc chắn rằng Mono-Framework (có hỗ trợ nhiều hệ điều hành hơn) không tốn nhiều tiền như vậy.
Bobby

1
@ BOB: đó là những gì tôi nghĩ. Mono + Silverlight dường như hầu hết các cách đó. Thêm vào đó một số P / Gọi và / hoặc C ++ / CLI cho các công cụ ít chính thống hơn (Mật mã, AD, v.v.) và tôi nghĩ rằng bạn có một giải pháp khá hợp lý với chi phí hợp lý. Lập luận của tôi là Microsoft DOES muốn chi tiền giúp mọi người tham gia OSX; nếu không, mọi người sẽ ngừng sử dụng C # /. NET trên Windows.
Ðаn

@Dan: Chính xác, Microsoft không muốn tương thích với thế giới, nếu không thế giới có thể sử dụng một cái gì đó khác biệt. ;)
Bobby

15
Khung công tác Mono cũng không phải là một giải pháp hoàn chỉnh, được kiểm tra đầy đủ, được ghi lại, được hỗ trợ. Có một sự khác biệt trong những gì "đủ tốt" cho nguồn mở và chất lượng mà mọi người mong đợi từ Microsoft. Nó sẽ dễ dàng tiêu tốn hàng trăm triệu đô la để họ làm điều đó đến mức người dùng sẽ yêu cầu. Những gì họ có thể làm để giảm bớt khoản đầu tư sẽ là chọn ra một tập hợp con phổ biến (và di động) của .NET framework và chỉ cần làm điều đó. Đó là những gì họ chọn làm, họ gọi nó là "Silverlight".
jpobst

@jpobst nhưng có vẻ như MS đã làm điều đó ... và hơn thế nữa?
Đаn

14

Không, Silverlight là tùy chọn duy nhất của Microsoft từ .Net trên OS X. Mono không "lag" nhiều như bạn nghĩ; nó hỗ trợ .Net 4.0 và C # 4 chẳng hạn. Tuy nhiên, bộ công cụ UI (WinForms và WPF) không được hỗ trợ tốt trên OS X. Mono hoàn toàn không hỗ trợ WPF. Microsoft cũng không thể viết lại toàn bộ công cụ kết xuất. Điều đó có thể OK, mặc dù. Nếu bạn muốn viết một ứng dụng Mac gốc, bạn nên viết một giao diện người dùng gốc (có lẽ sử dụng MonoMac).


Quản lý dường như không có xu hướng đi cùng với tùy chọn Mono. Và nó chắc chắn không hỗ trợ .NET 4.0 vào cùng ngày với Windows (hoặc?).
Đаn

Không phải Silverlight đã đi gần hết trên mặt trận WPF (giống như) sao? Có, XAML sẽ cần phải khác biệt để có được giao diện Mac.
Đаn

2
@Dan: Cách Mono di chuyển những ngày này, nếu bạn bắt đầu phát triển một ứng dụng cho phiên bản .NET mới nhất khi Microsoft phát hành, Mono sẽ hỗ trợ phiên bản tương tự vào thời điểm ứng dụng đó sẵn sàng xuất xưởng.
Anon.

@Dan SL và WPF dưới vỏ bọc đang cố gắng hợp nhất càng nhiều càng tốt. Có sự khác biệt kỹ thuật nhưng các khái niệm cơ bản là nền tảng chéo.
Aaron McIver

6
Nếu quản lý công ty của bạn không sẵn sàng sử dụng Mono thì bạn sẽ không thể tạo một ứng dụng máy tính để bàn được viết bằng C # 4.0 truyền thống, điều đó thật đơn giản.
Ramhound


4

Silverlight không chỉtrình duyệt . Vì phiên bản 3 OOB đã tồn tại và sẽ là con đường tôi sẽ đi nếu một nền tảng được Microsoft hỗ trợ là điều bắt buộc.

Mặc dù Mono có thể bị lag nhưng nó không bị xóa khỏi ngăn xếp .NET như bạn nghĩ và không nên bỏ qua như một lựa chọn khả thi.

Về lý do tại sao Microsoft không thực hiện toàn bộ ngăn xếp .NET; ROI.


Nhưng có vẻ như họ rất thân với Silverlight ... tại sao không hoàn thành công việc? Điều đó có vẻ tốt hơn cho mọi người so với Mono kỹ thuật đảo ngược trình biên dịch, CLR, v.v.
Đn

1
SL không phải là toàn bộ ngăn xếp .NET. Thời gian chạy SL so với toàn bộ ngăn xếp .NET là các động vật hoàn toàn khác nhau.
Aaron McIver

Có, nhưng vì bạn đã có thể thực hiện những việc như OOB như bạn đề xuất với SL, tại sao không chuyển phần còn lại (1/3? 40%?) Của ngăn xếp .NET? Hay SL thực sự không có gì hơn là một nỗ lực để giết Flash?
Đаn

@Dan Khi các công ty đang đẩy mọi thứ lên đám mây ... điều cuối cùng bạn muốn làm là chuyển một chồng lên không thể chạy trong đám mây. SL có thể chạy trên các trình duyệt. Bạn có thể tranh luận với Google và những người khác, nỗ lực làm việc trong trình duyệt là có thật. Tại sao tại thời điểm này, sau đó bạn sẽ chọn chuyển toàn bộ ngăn xếp sang HĐH với <10% thị phần cùng với ảo hóa rất phổ biến trong thời đại ngày nay?
Aaron McIver

Microsoft (được cho là) ​​có môi trường phát triển tốt nhất hiện nay với C # và .NET. Nhưng các công ty như của tôi sẽ ngày càng né tránh nó vì sự không chắc chắn xung quanh Mac / iPad / đám mây / v.v. C ++ có vẻ an toàn hơn nhiều.
Đаn

3

Phần lớn lợi nhuận của Microsoft đến từ hai sản phẩm - Windows và Office. Khả năng tương thích đa nền tảng sẽ làm tổn thương Windows.

Nếu bạn thực sự muốn cùng một mã chạy đa nền tảng, hãy viết một ứng dụng web. Nó không giống như bạn làm mặc dù. Chỉ trong trường hợp, không phải là một lý do chính đáng, đó là phạm vi leo.

Ngay cả khi bạn quyết định nhắm mục tiêu Mac OS X hoặc iOS trong 16 tháng kể từ bây giờ, bạn có thực sự nghĩ rằng bạn có thể lấy mã C ++ hiện tại của mình và biến nó thành một ứng dụng gốc tốt (hoặc thậm chí là chức năng) không? Trừ khi bạn đang làm việc trên một trò chơi toàn màn hình, câu trả lời là không.

Tiết kiệm thời gian với C # ngay bây giờ và nếu bạn quyết định chuyển sang Mac, hãy viết lại theo cách Mac với Objective-C và Ca cao - người dùng của bạn sẽ cảm ơn bạn.


1
"Chỉ trong trường hợp" là thực tế; không ai muốn nói với quản lý "rất tiếc" khi có một tùy chọn an toàn hơn trong C ++.
Đаn

1
Giả sử mã giao diện được phân tách hợp lý, việc di chuyển mã C ++ lên máy Mac sẽ dễ dàng hơn. Viết lại giao diện trong Objective-C bằng cách sử dụng Cacao, liên kết với phần còn lại và bạn đã hoàn thành rất nhiều công việc.
David Thornley

@David: và do đó, vấn đề đằng sau câu hỏi này: C ++ nhiều hơn, (nhiều) ít C #. Tôi (thực sự) thích C #!
Đаn

Những mối quan tâm đa nền tảng ngay tại đây là lý do tại sao nhiều người trong chúng ta vẫn đang sử dụng Java và không chuyển sang C #.
Brian Knoblauch

1

Có câu trả lời bán chính thức nào cho lý do tại sao Microsoft không hỗ trợ .NET trên máy Mac không?

Đâu là thị trường mà sẽ chứng minh MS chi tiêu kho báu? Để làm được điều này, họ sẽ phải bỏ tiền mặt nghiêm trọng - hàng triệu đô la tiền lương. Một quá trình đang diễn ra, khi các bản sửa lỗi và cập nhật xuất hiện.

Và để làm gì? Quyền khoe khoang? Tất cả những gì họ nhận được là khả năng mọi người bỏ Windows cho Apple và vẫn có thể chạy các ứng dụng của họ.

Nếu bất cứ ai cũng có lợi từ việc này, đó sẽ là Apple. Giúp mọi người dễ dàng chuyển đổi sang nền tảng của họ và cho các nhà phát triển (PHÁT TRIỂN PHÁT TRIỂN) để mã hóa trên nền tảng đó. Nhưng bạn có nghĩ rằng SJ cho một tào lao? Họ thà phát minh ra những thứ mới để gắn bó với tôi . Bên cạnh đó, hầu hết các khung công tác là HĐH và thông số kỹ thuật CLR đều miễn phí cho mọi người thực hiện. Bạn không thể dính một NDA bẩn thỉu vào bất kỳ thứ gì trong số đó.


Một phần của "những gì trong Microsoft" là để giữ mọi người sử dụng các công cụ nổi tiếng hàng đầu của họ trên Windows. Cách mọi thứ diễn ra xung quanh đây, C # /. NET sẽ được chuyển sang các ứng dụng nội bộ. Các nhà phát triển đã sử dụng C # trong nhiều năm đang viết lại C ++. Về chi phí; có vẻ như họ đã có khoảng 2/3 ở đó với Silverlight và / hoặc Mono.
Đаn

Mono là một nền tảng nguồn mở và trong khi nguồn cho .NET đã được phát hành, .NET Framework KHÔNG phải là nguồn mở. Microsoft sẽ không thể mua Mono, vì nhiều lý do, lý do chính là họ không có một ứng dụng nguồn mở 100% duy nhất. Bạn có biết rằng Silverlight chỉ là một ngôn ngữ duy nhất trong .NET và lý do nó là đa nền tảng vì Microsoft muốn nó là một thay thế cho Flash. Tôi cũng nên nói thêm rằng Apple đã thực hiện các động tác tay về phía thậm chí không cho phép một cái gì đó này trên hệ điều hành của họ.
Ramhound

1
@Dan nghe có vẻ như giải pháp cho tai ương của bạn không phải là "một ngôn ngữ để cai trị tất cả" mà là "Làm thế nào để chúng tôi triển khai theo cách không thể biết về nền tảng." Hầu hết mọi người đang thực hiện điều này bằng cách phá vỡ giao diện người dùng khỏi logic, nhúng một cái trên cơ sở trên mỗi nền tảng và cái còn lại là một dịch vụ trên các quán trọ.
Ripped Off

1
@ Tôi có một giải pháp cho điều đó ... Đừng viết mã cho Mac. Tôi có Thỏa thuận Không phát triển cho Apple cá nhân do tôi tự viết và ký. Tôi hoàn toàn ghét việc không thể mã hóa C #, và vì vậy tránh làm như vậy. Nhưng đôi khi bạn phải làm những gì bạn phải làm, và nếu điều ước là cá, chúng ta sẽ phải nghĩ ra một số cách nói khác để mô tả nhiều điều chúng ta muốn nhưng không thể có.
Ripped Off

1
@Dan kindasorta. Họ chưa thực sự chạm vào máy tính để bàn (chưa). Nhưng tôi ngạc nhiên về sự khác biệt của năm năm.
Ripped Off

0

Bạn có thể thấy dự án MonoMac hữu ích - http://www.mono-project.com/MonoMac

Nó cho phép phát triển các ứng dụng Ca cao theo phong cách Mono, có thể được triển khai cho cửa hàng Mac App.

Tôi mạnh mẽ xem xét cách tiếp cận này đối với một nhà phát triển không quen thuộc với Objective-C nhưng với .NET / Mono / Java, người phải cung cấp một ứng dụng trong kịch bản hạn chế thời gian.


0

Không ai.

Tôi khuyên bạn nên viết một ứng dụng C ++ có thể biên dịch chéo - bạn có thể có niềm vui trong đó - hoặc sử dụng Ruby với wxWidgets.

Tôi coi .NET là một đề xuất tồi cho phát triển đa nền tảng và bảo trì sản phẩm lâu dài. Mặc dù, anh bạn, bạn có thể nhanh chóng sử dụng các ứng dụng trong đó. : - /

Chúc Delphi vẫn là một ứng cử viên lớn.


1
Bạn đã từng nghe về Lazarus chưa?
Chúc mừng Coder

Ngoài ra, bao giờ đứng đầu Java?
Fernando Gonzalez Sanchez

0

Nếu bạn muốn chạy .NET nguyên bản trên máy Mac, bạn có thể sử dụng BootCamp để thực hiện việc này (tức là bạn chạy Windows trên máy Mac và các ứng dụng .NET của bạn trong Windows).

Nếu bạn có nghĩa là Mac OS X chứ không chỉ là phần cứng, thì bạn có thể sử dụng VMWare hoặc Parallels để chạy các ứng dụng .NET trong Windows (mô phỏng) trong OS X. Cả hai đều có chế độ trực quan cho phép ứng dụng của bạn xuất hiện như thể nó chỉ chạy trong OS X (nó sẽ trông và hoạt động giống như một ứng dụng Windows, nhưng nếu bạn đang viết một ứng dụng phi web đa nền tảng mà không có giao diện tùy chỉnh cho mỗi HĐH, bạn sẽ luôn gặp vấn đề đó).

Bạn sẽ nhận được cùng số lượng "hỗ trợ" bằng cách thực hiện việc này, vì bạn đang chạy ứng dụng trong Windows, mặc dù được ảo hóa. Tất nhiên, bất cứ ai chạy ứng dụng sẽ cần một bản sao của phần mềm ảo hóa và Windows, và sẵn sàng đưa ra một ứng dụng không hoạt động như ứng dụng OS X - nhưng đó là cách duy nhất để có "bản địa" .NET chạy trên máy Mac.


0

Dan, tôi không nghĩ bạn có thể làm điều này. Tuy nhiên, một giải pháp khả thi (vẫn là vapourware) là sử dụng Embarcadero Rad Studio C ++ Builder, có một VCL tốt để phát triển các ứng dụng trực quan (dựa trên nhiều .net) và chúng được hỗ trợ đa nền tảng. trong phiên bản tiếp theo.

Điều này sẽ được phát triển trên windows, nhắm đến Mac hoặc Linux. Hoặc như vậy lộ trình của họ nói.

Môi trường C ++ là hợp lý và nếu bạn phát triển dựa trên VCL thì về lý thuyết, ứng dụng sẽ chỉ hoạt động trên các nền tảng khác.

Tất nhiên cho đến khi nó thực sự được vận chuyển, nó vẫn còn để xem điều này thực sự hiệu quả như thế nào.


-2

Câu trả lời là không.

Trên thực tế trường hợp của bạn có vẻ là một ví dụ rất hay về việc không nên chọn .NET.


Không ai có thể dự đoán được tương lai và không ai muốn chấp nhận rủi ro "không đáng có".
Đаn

@Dan: Và vấn đề là gì? Bạn có vẻ đồng ý với tôi ...?
Gabriel Magana

-3

Nếu bạn muốn phát triển cho một hệ điều hành thì hãy sử dụng các công cụ phù hợp. Không có ứng dụng thực sự chuyên nghiệp được viết bằng đơn cho Mac. Mặt khác, có rất nhiều nhà phát triển không chuyên nghiệp sử dụng nhiều công cụ tạo ra rất nhiều rác. Nhìn vào các đánh giá ứng dụng đơn được viết cho OSX. Các nhà phát triển đang viết bằng cách sử dụng một khung không hoàn chỉnh được hack để phù hợp với nền tảng OSX. Bắt đầu viết - nếu bạn đã sử dụng C # Objective C là tìm hiểu nhanh.

Các nhà phát triển chuyên nghiệp cho mac sử dụng C ++, Objective C, Ca cao và Xcode. Tôi phát triển trên một số nền tảng và mỗi nền tảng có công cụ tốt nhất của riêng họ. Sử dụng Xcode cho Mac và iOS.

Giống như một lưu ý phụ Xcode không phải là Visual Studio, nó không ổn định và là một sự ô nhục đối với apple, nhưng nó hoạt động tốt khi bạn quen với những điều kỳ quặc. Rất khó để đánh bại các công cụ của microsofts - nhưng chúng được viết cho Windows chứ không phải Linux, iOS, OSX, AIX, v.v.


1
Bạn có bất kỳ sự thật nào để sao lưu các câu lệnh như "Xcode không ổn định và là một sự ô nhục đối với Apple" bởi vì dựa trên kinh nghiệm cá nhân của tôi, mọi người đã sử dụng Xcode đều yêu thích nó. Bên cạnh đó ngay cả sau khi bạn bày tỏ ý kiến ​​cá nhân về một chủ đề có vẻ như bạn không quen thuộc, bạn thậm chí không biết rằng vào năm 2013, thực sự có một giải pháp. Tất nhiên giải pháp là thực sự MonoXamarin.Macnhưng nó là một giải pháp. Phiên bản hiện tại của Mono gần như hoàn thành 100% triển khai .NET 4.0, nó chỉ thiếu một vài tính năng chính có khả năng sẽ không bao giờ được chuyển (ví dụ WPF).
Ramhound
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.