Mono ile .NET ikili çalıştırmak


4

C # / Mono kaynağından üretilen abc.exe aracım olduğunda 'mono abc.exe' kullanıyorum.

Abc.exe'yi 'abc.exe' değil 'mono abc.exe' ile çalıştırmanın bir yolu var mı? Yani, 'abc.exe' dosyasını çalıştırdığımda, 'mono abc.exe'yi otomatik olarak aranabilir hale getirebilir miyim?


belki bir başkası, sistemi doğrudan yürütme için nasıl yapılandıracağını bilir, ancak bu stackoverflow için bir soru olabilir.
Robert S Ciaccio,

@calavera Mono'da “JAR” eşdeğeri yok, hatırlayabildiğim kadarıyla mono çalışma zamanına ihtiyacınız var.
Martin Marconcini

Yanıtlar:


6

Bu linke bakınız

Temel olarak yapmanız gereken, Maco Mac OS X üzerinde çalışmak üzere tasarlanırken Mono araçlarından birini kullanmaktır (mkbundle geneldir). Tüm uygulama çalıştırılabilir dosyalarınızı, kaynaklarınızı ve dll'nizi daha sonra olabilecek tek bir çalıştırılabilir dosyaya bağlamak için kullanılır. tek bir uygulama olarak çalıştırın.

Macpack doc'dan:

macpack, Cocoa # uygulamalarını Çift Tıklanabilir, Bulucu dostu, Mac OS X'te paketlemek için kullanılması gereken bir araçtır. Statik kitaplıkları ve kaynakları bir araya getirir, ayrıca .app paketine temel bir info.plist oluşturur.

Örneğin, aşağıdaki komutlar CurrencyConverter.exe dosyasını bir uygulama paketine oluşturmak için kullanılır:

$ mcs -g -debug+ CurrencyConverter.cs -out:CurrencyConverter.exe -pkg:cocoa-sharp
$ rm -rf CurrencyConverter.app
$ macpack -m:2 -o:.  -r:/Library/Frameworks/Mono.framework/Versions/Current/lib/    
  libCocoaSharpGlue.dylib -r:CurrencyConverter.nib -n:CurrencyConverter 
  -a:CurrencyConverter.exe

Elde edilen CurrencyConverter.app, Finder söz konusu olduğunda sadece bir başka Mac OS X uygulamasıdır ve Finder'dan açılabilir veya Open-a CurrencyConverter komutunu kullanarak Terminal'den başlatılabilir.


donatmak veya macpac gibi sesler gerçekten basit bir şey istemediği sürece, gitmek için bir yol olurdu.
Robert S Ciaccio,

Cevabınızın metninde bu bağlantıya dayanarak bazı önerilerde bulunabilir misiniz? link çürüklüğü zaman içinde her zaman bir sorundur, ancak buraya koyarsanız ve kaynağınıza sadece referans gösterirseniz, gelecekte de faydalı olacaktır.
Robert S Ciaccio

2

Calavera'nın cevabını bir parametre ile yapmanıza izin verecek şekilde iyileştirmek için komut dosyası şöyle görünmelidir:

#!/bin/bash
mono $1

Bu şekilde yapabilirsiniz:

./abc.sh name_of_the_app.exe

Bunu yorum olarak eklerdim, ancak biçim kaybedilmiş


1
yanlış anlama, ama bu tür gereksiz değil mi? Komut çağrısı ile mono çağrısı yerine, ancak her iki durumda da yine de uygulama adını yazmanız gerekir ... böylece $ mono someapp.exe`$ callmono.sh someapp.exe` ile değiştirirsiniz . sadece söyleyerek: P
Robert S Ciaccio 17:10,

Bunu düşünüyordum…;) gerçek şu ki, mono genellikle çılgın bir yolda, senaryo ile tam yolu koyabilirsiniz, ama evet. Beni tekmele.
Martin Marconcini

bu doğru, eğer mono sizin için değilse $PATH, önünüzdeki mutlak yol olmadan onu aramanıza izin verir.
Robert S Ciaccio

1

Mono ile ilgili çok fazla tecrübem yok, ancak muhtemelen mono görüşmesini yapan yürütülebilir bir kabuk betiği oluşturmanız gerekecek. Gibi bir şey:

$ vi abc.sh

#!/bin/bash
#abc.sh
mono abc.exe
:wq

$ chmod +x abc.sh
$ ./abc.sh

prosseeek'in istediği görevi yapmadı, sadece belirli bir dosyayı çalıştırmak için başka bir kabuk betiği yarattınız, ancak genel bir çözüm istediğini düşünüyorum.
Am1rr3zA

@ am1rr3za: anladım ama dediğim gibi mono kullanmadım, bu yüzden çalıştırılabilir kodunuzu doğrudan komut satırından çalıştırabilmeniz için bir yol olup olmadığını bilmiyorum. En azından windows dünyasında, işletim sistemi bir .net binary'inin nasıl tanımlanacağını ve MSIL'in yorumlanması için .net CLR'nin nasıl yükleneceğini bilir. İkili makine diline derlenmediği sürece, bunun Unix'te nasıl çalışacağını bilmiyorum. Ancak .net'te bir çalışma zamanı olmalıdır (doğrudan bir java uygulamasını da çalıştırabileceğinizi sanmıyorum).
Robert S Ciaccio,
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.