.NET 4.0 uygulamalarını Mac'te yerel olarak çalıştırmanın desteklenen bir yolu var mı?


11

Varsa, Microsoft'un C # /. NET 4.0 kodunu Mac'te yerel olarak çalıştırmak için desteklenen seçenekler nelerdir? Evet, Mono'yu biliyorum, ama diğer şeylerin yanı sıra Microsoft da gecikiyor. Silverlight yalnızca bir web tarayıcısında çalışır. VMWare tipi bir çözüm de bunu kesmez.

Microsoft'un Mac'in kendisinde .NET'i neden desteklemediğine dair yarı yetkili bir yanıt var mı? Silverlight ve / veya Mono satın alabilirler ve çabucak orada olabilirler. Yerel Visual Studio'ya gerek yok; çapraz derleme ve uzaktan hata ayıklama iyidir.

Bunun nedeni, çalıştığım yerde C # yerine C ++ 'da çok daha fazla gelişme yapılmasına neden olan gelecek hakkında artan miktarda belirsizlik olması; yepyeni projeler C ++ kullanmayı tercih ediyor. Mac (veya iPad) bir gereklilik haline geldiğinde hiç kimse yönetime 18-24 ay sonra "özür dilerim" demek istemez. C ++ bugün (tartışmalı olarak) üretkenlik kaybı anlamına gelse bile daha güvenli bir seçenek olarak görülmektedir.


2
Kim tarafından destekleniyor?

MS'in destekleyip desteklemediğini neden umursuyorsunuz? IMO, Mac'i hedeflemek istiyorsanız Apple'ın desteklemesi daha önemlidir.
alternatif

C ++ ile gitmek kötü bir fikir değildir. Taşınabilir bir kod tabanınız olabilir ve her platformda yerel GUI'leri kullanabilirsiniz.
mike30

1
Bu gönderiyi güncellemek için MS'in dikkatini çektiği anlaşılıyor ve farklı işletim sistemlerinde .NET'i desteklemeye başlayacaklar, ancak bunun nasıl yapılacağı açık değil. NET ile NOV kullanarak platformlar arası uygulamalar oluşturabilirsiniz: nevron.com/products-open-vision.aspx (Bu şirket için çalışıyorum). Genellikle pencerelerde C # ile kod yazmanıza ve ardından Wpf, MAC, Silverlight ve yakında iOS ve Android için derlemenize izin verir. Bu ürünün ücretsiz (topluluk) bir sürümü var, bu nedenle üretkenlikten ödün vermenize ve C ++ gizli yapmanıza gerek kalmıyor.
Bob Milanov

Yanıtlar:


17

Microsoft'un Mac'te .NET'i neden desteklemediğine dair yarı yetkili bir yanıt var mı?

En iyi yanıt, muhtemelen Mac'te .NET'i "desteklememeniz" dir. .NET'i Mac'e taşımak için yüz milyonlarca dolar ve birkaç yıl harcıyorsunuz.

Bazı şeyler tamamen yönetilir ve bağlantı gerektirmezken, çoğu şey Win32 API'nin etrafındaki sarmalayıcılardır (windows, kontroller, gdi +, kriptografi, aktif dizin, COM, kurumsal hizmetler, cihaz erişimi, ses, video, codec bileşenleri, winformlar, vb. vb).

Bunların her birinin arka uçta soyutlanması ve OSX'teki eşdeğer yerel kütüphanelere yeniden eşlenmesi gerekir. Tabii ki, hoş bir temiz haritalama olmayacak, bu yüzden aynı şekilde çalışmasını sağlamak için kesmek üzerine kesmek yazmalısınız.

Daha sonra OSX'teki bu API'lerin kırılgan olabileceği ve Apple'ın geriye dönük uyumlulukta çok iyi olmadığı sorunu var, bu nedenle hack'lerinizi her büyük sürümle (ve bazen küçük sürüm ve düzeltmelerle) yeniden yapıp yüksek bir bakım maliyeti elde edersiniz.

Temel olarak, bu muazzam miktarda para ve sahibi yine de bunu yapmak size karşı olacak bir platformda çok az kazanç için çalışır. İnsanların kendi platformunuzdan bir rakibin platformuna geçişine yardımcı olmak için para harcamak istemiyorsunuz.

Böylece, mükemmel olmayan çapraz platform seçenekleriyle kalırsınız:

  • İleride yine de taşınmayı gerektiren C ++
  • Microsoft desteği için tarayıcıdan Silverlight
  • Mono, .NET'in sağlıklı bir alt kümesini desteklemek için çalışır, ancak Microsoft değil

5
You spend hundreds of millions of dollars and several years porting .NET to the Mac.Affedersiniz? Bu rakam biraz yüksek ... Mono-Framework'ün (daha fazla işletim sistemi desteği ile) bu kadar pahalı olmadığından eminim.
Bobby

1
@Bobby: Ben de öyle düşünüyorum. Mono + Silverlight en çok orada görünüyor. Daha az ana akım şeyler (Kriptografi, AD, vb.) İçin bazı P / Invoke ve / veya C ++ / CLI ekleyin ve makul maliyetle oldukça makul bir çözümünüz olacağını düşünüyorum. Benim iddiam, Microsoft'un insanların OSX kullanmasına yardımcı olmak için para harcamak istemesidir; yapmazlarsa, insanlar Windows'ta C # /. NET kullanmayı bırakacaktır.
Ðаn

@Dan: Tam olarak, Microsoft dünyayla uyumlu olmak istemiyor, aksi takdirde dünya farklı bir şey kullanabilir. ;)
Bobby

15
Mono çerçevesi de eksiksiz, tam olarak test edilmiş, belgelenmiş, desteklenen bir çözüm değildir. Açık kaynak ve insanların Microsoft'tan beklediği kalite için "yeterince iyi" olan şeyin farkı vardır. Kullanıcıların talep edeceği seviyeye ulaşmaları yüz milyonlarca dolara mal olur. Yatırımı azaltmak için yapabilecekleri, .NET çerçevesinin popüler (ve taşınabilir) bir alt kümesini seçmek ve bunu yapmak olacaktır. Bunu yapmayı seçtiler, buna "Silverlight" diyorlar.
jpobst

@jpobst ama yine de MS tam da bunu yapmış gibi görünüyor ... ve daha fazlası?
Ðаn

14

Hayır, Silverlight OS X üzerinde .Net'ten tek Microsoft seçeneğidir. Mono düşündüğünüz kadar "gecikmez"; Örneğin .Net 4.0 ve C # 4'ü destekler. Bununla birlikte, UI araç setleri (WinForms ve WPF) OS X'te iyi desteklenmez. Mono, WPF'yi hiç desteklemez. Microsoft, tüm oluşturma motorunu yeniden yazmadan da edemedi. Yine de bu muhtemelen sorun değil. Yerel bir Mac uygulaması yazmak istiyorsanız, yerel bir kullanıcı arayüzü yazmalısınız (belki de MonoMac kullanıyor).


Yönetim Mono seçeneği ile birlikte gitmek için çok eğimli görünmüyor. Ve kesinlikle .NET 4.0'ı Windows (veya?) İle aynı gün desteklemedi.
Ðаn

Silverlight, WPF (benzeri) cephesinde zaten çok fazla değil mi? Evet, Mac'in görünmesini sağlamak için XAML'nin farklı olması gerekir.
Ðаn

2
@Dan: Mono'nun bu günlerde hareket etme şekli, Microsoft'u piyasaya sürdüğünde .NET'in en son sürümü için bir uygulama geliştirmeye başlarsanız, Mono aynı sürümü, uygulama gönderilmeye hazır olduğunda destekleyecektir.
Anon.

@Lan SL ve WPF kapakların altında mümkün olduğunca birleşmeye çalışıyor. Teknik farklılıklar vardır, ancak temel kavramlar çapraz platformdur.
Aaron McIver

6
Şirket yönetiminiz Mono kullanmaya istekli değilse, geleneksel C # 4.0 ile yazılmış bir masaüstü uygulamasını bu kadar basit hale getiremezsiniz.
Ramhound


4

Silverlight yalnızca tarayıcı değildir . Sürüm 3 OOB var olduğundan ve Microsoft desteklenen bir platform bir zorunluluk ise ben almak istiyorum yolu olurdu.

Mono gecikebilir olsa da, düşündüğünüz gibi .NET yığınından kaldırılmaz ve uygun bir seçenek olarak bir kenara atılmamalıdır.

Microsoft'un neden .NET yığınının tamamını uygulamadığına gelince; YG.


Ama görünüşe göre Silverlight ile çok yakınlar ... neden sadece işi bitirmiyorsunuz? Bu, herkes için
Mono'nun

1
SL, tüm .NET yığını değildir. Tüm .NET yığınına karşı SL çalışma zamanı tamamen farklı hayvanlardır.
Aaron McIver

Evet, ancak önerdiği gibi zaten SL ile OOB'de gibi şeyler yapabiliriz beri neden değil liman .NET yığın geri kalanını (1/3?% 40?)? Yoksa SL gerçekten Flash'ı öldürme girişiminden başka bir şey değil mi?
Ðаn

@Dan Şirketler bir şeyleri buluta aktarırken ... yapmak istediğiniz son şey, bulutta çalışamayan bir yığını taşımaktır. SL tarayıcılarda çalışabilir. Google ve diğerlerinin beğenileri ile bir tarayıcıda çalışmak için gerçek olduğunu iddia edebilirsiniz. Neden şu anda tüm yığını, bu gün ve yaşta bu kadar yaygın olan sanallaştırma ile birlikte <% 10 pazar payına sahip bir işletim sistemine taşımayı tercih edersiniz?
Aaron McIver

Microsoft (tartışmasız) bugün C # ve .NET ile mevcut en iyi geliştirme ortamına sahiptir. Ancak benim gibi şirketler, Mac / iPad / bulut / vb. Etraftaki Belirsizlik nedeniyle giderek ondan uzaklaşacak. C ++ çok daha güvenli görünüyor.
Ðаn

3

Microsoft'un kârının çoğu iki üründen geliyor - Windows ve Office. Çapraz platform uyumluluğu Windows'a zarar verir.

Aynı kodu çapraz platformda çalıştırmak istiyorsanız, bir web uygulaması yazın. Ama senin gibi görünmüyor. “Her ihtimale karşı” iyi bir neden değil, kapsamda sürünme.

Şu andan itibaren 16 ay içinde Mac OS X veya iOS'u hedeflemeye karar verseniz bile, mevcut C ++ kodunuzu alıp iyi (veya işlevsel) bir yerel uygulamaya dönüştürebileceğinizi düşünüyor musunuz? Tam ekran bir oyun üzerinde çalışmadığınız sürece, cevap hayır.

Şimdi C # ile zaman kazanın ve Mac'e geçmeye karar verirseniz, Objective-C ve Cocoa ile Mac yolunu yeniden yazın - kullanıcılarınız size teşekkür edecektir.


1
"Her ihtimale karşı" gerçektir; kimse C ++ 'da daha güvenli bir seçenek olduğunda yönetim "oops" söylemek istemiyor.
Ðаn

1
Arabirim kodunun doğru şekilde ayrıldığı varsayılarak, C ++ kodunu Mac'e taşımak daha kolay olacaktır. Objective-C'deki arayüzü Kakao kullanarak yeniden yazın, gerisini bağlantılandırın ve bir sürü iş yaptınız.
David Thornley

@David: ve dolayısıyla bu sorunun ardındaki sorun: daha fazla C ++, (çok) daha az C #. Ben C # gibi!
Ðаn

Bu platformlar arası endişeler şu anda neden birçoğumuz hala Java kullanıyor ve C # 'a geçmiyor.
Brian Knoblauch

1

Microsoft'un Mac'te .NET'i neden desteklemediğine dair yarı yetkili bir yanıt var mı?

MS'in hazineyi kodlamasını harcamasını haklı kılacak piyasa nerede? Bunu yapmak için ciddi nakit milyonlarca dolar maaş düşürmek zorunda kalacaklardı. Düzeltmeler ve güncellemeler geldikçe devam eden bir süreç.

Ve ne için? Övünme hakları? Bundan tek çıkanlar, insanların Windows için Apple'ı terk etme ve uygulamalarını hala çalıştırabilmeleri.

Biri bunu yapmaktan kâr ederse, Apple olur. İnsanların platformlarına geçiş yapmasını ve geliştiricilerin (GELİŞTİRİCİLER GELİŞTİRİCİLER) bunun üzerine kod yazmasını kolaylaştırın. Ama sence SJ bir saçmalık mı? Bunlar daha ziyade bir sopa yeni şeyler icat ediyorum i Infront. Ayrıca, çerçevenin çoğu işletim sistemidir ve CLR özellikleri herkes için ücretsizdir. Hiçbirine pis bir NDA yapıştıramazsınız.


"Microsoft içindekiler" in bir parçası, insanları Windows'ta birinci sınıf araçlarını kullanmaya devam etmektir. Burada işler yolunda giderken, C # /. NET şirket içi uygulamalara düşecektir. Yıllardır C # kullanan geliştiriciler tekrar C ++ yazıyor. Maliyet gelince; Silverlight ve / veya Mono ile yaklaşık 2/3 gibi görünüyorlar.
Ðаn

Mono bir açık kaynak platformudur ve .NET için kaynak serbest bırakılırken, .NET Framework açık kaynak DEĞİLDİR. Microsoft, Mono'yu satın alamayacak, birçok nedenden dolayı, en önemlisi,% 100 tek bir açık kaynak uygulamasına sahip olmamalarıdır. Silverlight'ın .NET içinde yalnızca tek bir dil olduğunu ve çok platformlu olmasının sebebini biliyor musunuz, çünkü Microsoft Flash'ın yerini almasını istiyor. Apple'ın işletim sistemlerinde buna izin vermemek için el hareketleri yaptığını da eklemeliyim.
Ramhound

1
@Dan kederinizin çözümü “hepsine hükmedecek bir dil” değil, “Platformdan bağımsız bir şekilde nasıl konuşlandırıyoruz” gibi geliyor. Çoğu insan bunu, kullanıcı arayüzünü mantıktan kırarak, birini platform başına ve diğerini iç tüplere bir hizmet olarak yerleştirerek başarıyor.
Off Rip

1
@Bunun için bir çözümüm var mı? Mac için kodlama. Kendi yazdığım ve imzaladığım kişisel bir Apple için Geliştirilmeyen Sözleşmem var. Tamamen C # kodlamak mümkün değil nefret ediyorum ve bu yüzden bunu yapmaktan kaçının. Ama bazen yapman gerekeni yapmalısın ve eğer istekler balık olsaydı istediğimiz ama yapamayacağımız birçok şeyi tanımlamak için başka bir şey düşünmeliyiz.
Off Rip

1
@Dan kindasorta. Masaüstüne henüz dokunmadılar (henüz). Ama beş yıllık farkın ne olduğuna şaşırıyorum.
Yırtık

0

MonoMac projesini yararlı bulabilirsiniz - http://www.mono-project.com/MonoMac

Mac App Store'a dağıtılabilen Kakao uygulamaları Mono stili geliştirmeye izin verir.

Bu yaklaşımı, Objective-C'ye aşina olmayan ancak zaman kısıtlamalı bir senaryoda bir uygulama sunmak zorunda olan .NET / Mono / Java ile geliştirici için kesinlikle bu yaklaşımı düşünürüm.


0

Yok.

Ben ya çapraz derlenebilir bir C ++ uygulaması yazabilirsiniz - içinde sevinç olabilir - ya da Ruby wxWidgets ile kullanma.

.NET'i platformlar arası geliştirme ve uzun vadeli ürün bakımı için kötü bir teklif olarak görüyorum. Rağmen, adam, içinde hızlı uygulamaları fısıldayabilirsiniz. : - /

Keşke Delphi hala büyük bir rakipti.


1
Hiç Lazarus'u duydun mu?
Mutlu Kodlayıcı

Ayrıca, hiç Java başkanı?
Fernando Gonzalez Sanchez

0

.NET'i yerel olarak bir Mac'te çalıştırmak istiyorsanız, bunu yapmak için BootCamp'i kullanabilirsiniz (yani Mac'te Windows'u ve Windows'ta .NET uygulamalarınızı çalıştırırsınız).

Yalnızca donanımdan ziyade Mac OS X'i kastediyorsanız, OS X'te Windows'ta (öykünmede) .NET uygulamalarını çalıştırmak için VMWare veya Parallels kullanabilirsiniz. OS X içinde (bir Windows uygulaması gibi görünecek ve davranacak, ancak her bir işletim sistemi için özel bir arayüz olmadan bir platformlar arası web dışı uygulama yazıyorsanız, her zaman bu sorunla karşılaşırsınız).

Uygulamayı sanallaştırılmış da olsa Windows'da çalıştırdığınız için bunu yaparak aynı miktarda "destek" alacaksınız. Tabii ki, uygulamayı çalıştıran herkes sanallaştırma yazılımının ve Windows'un bir kopyasına ihtiyaç duyacak ve bir OS X uygulaması gibi davranmayan bir uygulamaya katlanmak isteyecektir - ancak "yerel" olmanın tek yolu budur Mac üzerinde çalışan .NET.


0

Dan, bunu yapabileceğini sanmıyorum. Bununla birlikte, olası bir çözüm (hala vapourware), görsel uygulamalar geliştirmek için güzel bir VCL'ye sahip olan (.net'in çoğunun temel aldığı) Embarcadero Rad Studio C ++ Builder'ı kullanmaktır ve platformlar arası desteğin çıkması için RUMORED'dir. bir sonraki sürümde.

Bu, Windows üzerinde geliştirilecek, Mac veya Linux'u hedefleyecektir. Ya da yol haritaları diyor.

C ++ ortamı makul ve VCL karşı geliştirirseniz teoride uygulama sadece diğer platformlarda çalışacaktır.

Tabii ki gerçekten gönderilinceye kadar bunun ne kadar etkili olduğunu görmeye devam ediyor.


-2

Cevap hayır.

Aslında davanız ne zaman çok iyi bir örnek gibi görünüyor değil .NET seçin.


Kimse geleceği tahmin edemez ve hiç kimse “gereksiz” risk almak istemez.
Ðаn

@ Dan: Ve önemli olan ne? Benimle aynı fikirde görünüyorsun ...?
Gabriel Magana

-3

Bir işletim sistemi için geliştirmek istiyorsanız doğru araçları kullanın. Mac için mono yazılmış gerçekten profesyonel bir uygulama yoktur. Öte yandan çok fazla çöp oluşturan çok sayıda araç kullanan profesyonel olmayan geliştiriciler var. OSX için yazılmış mono uygulama incelemelerine bakın. Geliştiriciler, OSX platformuna uyacak şekilde tamamlanmamış bir çerçeve kullanarak yazıyorlar. Yazmaya başlayın - eğer C # kullandıysanız Amaç C hızlı bir öğrenmedir.

Mac için profesyonel geliştiriciler C ++, Objective C, Cocoa ve Xcode kullanır. Birkaç platformda geliştiriyorum ve her birinin kendi en iyi araçları var. Mac ve iOS için Xcode kullanın.

Bir yan not Xcode Visual Studio olmadığı gibi, kararlı değildir ve karşılaştırıldığında elma için bir utançtır, ancak garipleşmeye alıştığınızda iyi çalışır. Microsofts araçlarını yenmek çok zordur - ancak Windows için Linux, iOS, OSX, AIX vb.


1
"Xcode kadar kararlı değil ve Apple için utanç verici" gibi ifadeleri yedeklemek için herhangi bir gerçek var mı, çünkü kendi kişisel deneyimime dayanarak Xcode'u kullanan herkes onu sevdi. Ayrıca, bir konu hakkındaki kişisel fikrinizi ifade ettikten sonra bile, aileniz gibi görünmüyorsa bile, 2013'te aslında bir çözümün olduğunun farkında bile değilsiniz. Tabii ki çözüm aslında Monove Xamarin.Macbir çözüm. Mono'nun şu anki sürümü, .NET 4.0'ın neredeyse% 100 tam bir uygulamasıdır, sadece hiçbir zaman taşınamayacak olan birkaç önemli özelliğe sahip değildir (yani WPF).
Ramhound
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.