2009-08-24 13 views
13

Basit saf .Net 2.0 konsol yardımcı programımı, bir USB çubuğuna takabildiğim ve CLR ve çerçeve kitaplıklarının belirli bir makinede yüklü olup olmadığından endişelenmenize gerek kalmadan taşınabilir bir exe'ye dönüştürmek istiyorum.Basit bir .Net konsol projesini Mono ve mkbundle ile taşınabilir bir exe'ye dönüştürmek nasıl?

Stackoverflow zaten .Net-projelerden kendine yeten, Windows exes oluşturmak için Mono ve Mkbundle kullanımıyla ilgili some information vardır, ama ne istiyorum kompakt ama yararlı NASIL olduğunu.

Basit bir C# Visual Studio projesinden taşınabilirlik elde etmek için gereken minimum adımlar nelerdir?

cevap

16

here'un basit bir yöntemini buldum, ancak kendim test etmediğim için sonuçları garanti edemiyorum. Her zamanki gibi YMMV.

orijinal makaleden alıntı (yanı olsa orijinal makaleye konu takip edin):

Mkbundle:

ihtiyacınız neden hiç merak mü uygulamalarınız ile Mono paket. Programınızı çalıştırmak için NET Framework veya Mono yüklü? Eğer müşterileriniz ek çerçeveleri kurmak için müşterilerinizi nagging yapmadan dağıtabiliyor olsanız çok daha kullanışlı olurdu, değil mi? İşte buradayız. .NET tabanlı bir uygulamayı Mono ile paketlemenizi sağlar, böylece Mono'ya veya .NET'i çalıştırmak için yüklü olmanıza gerek yoktur.

en yeni Mono ve Cygwin yüklemeniz gerekir bir ortam

İlk hazırlayın. Mono'yu kurmak çok basittir, bu yüzden hiçbir şeyi berbat edemezsiniz. Cygwin'i kurmaya başladığınızda Tam görünüm'e gidin, ardından lütfen 4 ek paket ekleyin. Bunlar: gcc, mingw, mingw-zlib ve zlib.

Şimdi bir komut istemine ihtiyacınız var. Hem Mono hem de Cygwin, masaüstünüzdeki komut istemleri için kısayollar oluşturur, ancak bunları bir arada birleştirmeniz gerekir. İşte benim için bunu yapan bir parti. Örneğin, başka bir Mono sürümünüz varsa, bunu değiştirmeniz gerekebilir.

Kodu:

echo Mono version 2.4 Build 6 
echo Prepending 'C:\PROGRA~1\Mono-2.4\bin' to PATH 
PATH=C:\PROGRA~1\Mono-2.4\bin;%PATH% 

chdir C:\cygwin\bin 
bash --login -i 

bu Cygwin modunda çalışırken, Mono ile

Bu yüzden bir komut istemine şimdi bir uygulama demet haline getirin. Bunun artık bir DOS istemcisi olmadığını ve "dir" in artık çalışmayacağını unutmayın. Dosyaları listelemek için linux komutunu "ls" kullanın. Şimdi göz attığınız klasör aşağıdaki gibi. Arek bir kullanıcı adıdır. Kodu: senin explorer ile bu klasöre

C:\cygwin\home\Arek 

göz. Şimdi bu dosyaya 2 dosya kopyaladınız. 1. Uygulamanız exe ve 2. Mono dosyanızda bulabileceğiniz Mono.dll (2MB) dosyasıdır. Kodu: Tüm işlemin uzun dosya adları ile çalışmak, bu nedenle uygulama exe yeniden adlandırmak gelmez Nedense

C:\Program Files\Mono-2.4\bin 

. Bu eski DOS 8.3 adlandırma ile uyumlu olmalıdır.

Komut istemine geri dönelim. Uygulamanızı paketlemek için sadece 1 komuta ihtiyacınız var ve burada bir açıklama var.

mkbundle Mono paketi içinde bir programdır | -o Bundled1.exe, Mono paketli exe'nin nasıl adlandırılacağını belirtir | Winform1.exe ne ekleneceğini söylüyor, Mono kütüphaneleri yine de dahil olacak | - ne yaptıklarından emin olmasam da -z çıkışı sürü

Kodu exe sıkıştırmak olacaktır:

mkbundle -o Bundled1.exe Winform1.exe --deps -z 

Yani şimdi Mono kendisi ile birlikte kendi uygulamasını içeren Bundled1.exe aldık. Çalıştırmak için Mono'ya ve .NET'e ihtiyacınız yoktur. Boyutu 4MB veya daha fazla olacak dikkat edin. Birlikte gelen exes hafif değildir.

İlgili konular