Na jakých OS mono běží?
Mono běží na Linuxu, UNIXU a Windows a na systémech od těchto OS odvozených.
Jsou binární soubory Mono kompatibilní s Windows?
Ano, Mono je binárně kompatibilní s Windows. To znamená, že můžete spouštět binární soubory vytvořené pomocí .NET kompilátorů od Microsoft a jiných dodavatelů.
Pokud portujete svou aplikaci, měli by jste se ujistit zda funguje a dávat pozor na rozdíly způsobené během pod různými operačními systémy a rozdíly v VM implementaci (chyby, chybějící funkce) by mohli způsobit problémy s během vaší aplikace.
Mono nemá implementovány všechna .NET 1.1 API (podívejte se na poznámky k vydání verze 1.0) a pokud budete spouštět binární soubor z Windows, který požaduje neimplementované API obdržíte chybovou hlášku.
Proto vám doporučuji kompilovat aplikace s Mono C# kompilátorem aby jste si byli jisti, že požadovaná API jsou dostupná.
Vše není úplně perfektně doladěno, některá API v Mono způsobují neimplementované výjimky, takže by jste si měli otestovat vaši aplikaci hned v Mono.
Jsou zde nějaké důvody pro tvorbu aplikací v Monu místo tvorby ve Visual Studiu a následným kopírováním binárních souborů?
Všeobecně platí, že pokud vám tvorba ve Visual Studiu připadá pohodlná můžete v ní i nadále pokračovat.
Použitím Linuxu docílíte toho, že si můžete naprogramovanou aplikaci ihned odzkoušet a lépe tak vyhledat chyby.
Pokud se rozhodnete pro tvorbu aplikace v .NET riskujete, že nastanou problémy s neimplementovanými funkcemi, například některé API.
Mohu spustit Mono aplikaci bez 'mono program.exe'?
Ano, toto je možné na Linuxových systémech, aby jste tak učinili, použijete něco jako toto:
if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then
/sbin/modprobe binfmt_misc mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
fi
if [ -e /proc/sys/fs/binfmt_misc/register ]; then
echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register
else
echo "No binfmt_misc support" exit 1
fi
Jaké architektury Mono podporuje?
Podívejte se na stránku podporovaných platforem na domovské stránkce Mono projektu.
Může Mono běžet na Windows 9x, or ME edici?
Mono potřebuje ke běhu Unicode verze Win32 API, a pouze několik z "W" funkcí je podporováno pod Win9x. Je zde přítomen Microsoft Layer z Unicode, který poskytuje implementaci API na 9x systems.
Naneštěstí používá linker trik pro zpožděné načítání, který není podporován ld, takže budete potřebovat nějaký druh adaptéru. Také budete potřebovat MSLU a jednu z následujících knihoven k nasměrování Mono na unicows.dll http://mono.eurosoft.od.ua/files/unimono.zip nebo jako alternativu vyhledejte "libunicows".
Nejsou zapotřebí žádné změny v zdrojovém kódu Mona, jedinou věc kterou zkontrolujte je linker přeposílající data knihovně adaptéru místo knihoven Win32. Toto je zajištěno vložením -lunimono před -lkerner32/user32 v nastavení linkeru.
Proč je podporován Windows?
Jsou zde tyto důvody:
* Podpora Windows napomáhá odlišit portované prvky Mona o neportovaných a tak napomáhá dalšímu rozvoji Mona.
* Můžeme lépe určit podstatu problémů (je to runtime problém, nebo OS problém?).
* Mnoho lidí, kteří se podílejí na vývoji Mona jsou programátoři Windows, mnoho z nich nemá zájem se učit pracovat s Linuxem.
* Mono moc neupravuje windows registr, neaktualizuje system DLL, instaluje DLL do Windows/System32.
* Pomáhá Windows-orientovaným vývojářům otestovat jejich kód pod Monem než jej budou portovat pod OS Linux.
* Mono a aplikace které jsou pro Mono mohou být poskytovány bez instalátoru (stačí pouze "xcopy" zkopírovat vaši aplikaci a Mono soubory aniž byste museli instalovat .NET knihovny).
Jak detekovat správnou spouštěcí platformu?
Správná spouštěcí platforma může být detekována použitím hodnoty proměnné System.Environment.OSVersion.Platform. Avšak správná detekce Unix platforem, v každém případě, na tomto budete muset trošku zapracovat. První verze framework (1.0 and 1.1) neobsahují žádnou PlatformID hodnotu pro Unix, takže Mono použije hodnotu 128. Novější framework 2.0 má přiřazenou k Unix PlatformID hodnotu avšak, naneštěstí, je tato hodnota: 4.
To znamená, že aby jsem spolehlivě zjistily jakou platformu používáte musíte zkontrolovat obě hodnoty (4 and 128). To zajistí, že detekční kód bude pracovat správně na Monu s CLR 1.x knihovnami a teké na Monu s Microsoft CLR 2.x knihovnami.
Takto vypadá ukázka detekčního kódu:
using System;
class Program {
static void Main ()
{
int p = (int) Environment.OSVersion.Platform;
if ((p == 4) || (p == 128)) {
Console.WriteLine ("Running on Unix");
} else {
Console.WriteLine ("NOT running on Unix");
}
}
}
Jak mohu zjistit zda je Mono správně nainstalováno?
Neexistuje přesně žádná pevně stanovená metoda jak zjistit instalaci Mona pod Windows, ale uvedeme si zde jeden postup který je často k tomuto účelu využíván:
Jako první se podívejte na hodnotu verze, která je uložena v registru pod tímto klíčem.
$version = HKLM_LOCAL_MACHINESoftwareNovellMonoDefaultCLR
Potom, s použitím této hodnoty, zkontrolujete registr znovu s textem, $monoprefix:
$monoprefix = HKLM_LOCAL_MACHINESoftwareNovellMono$versionSdkInstallRoot
Pokud jedna s předcházejících hodnot není k nalezení nemáte správně nainstalováno Mono.
Jak zjistím, že aplikace běží pod Mono?
Pomocí následujícího kódu zjistíte jaké knihovny používá váš program, tedy jestli používá Mono či nikoli:
using System;
class Program {
static void Main ()
{
Type t = Type.GetType ("Mono.Runtime");
if (t != null)
Console.WriteLine ("You are running with the Mono VM");
else
Console.WriteLine ("You are running something else");
}
}
Běží Mono na Fedora Core 5?
Mono poběží na FC5 tak dlouho dokud nezapnete SELinux. Poté mohou některé aplikace nahlásit chybu.
Někteří lidé zaznamenali také chyby při kompilaci při zapnutém SELinux. Ujistěte se tedy, že je tato funkce vypnutá.
Mohu dostat Mono na velmi malé systémy?
Nynější minimální instalace Mona potřebuje méně než 4 MB diskového místa a 4 MB operační paměti. Mono se základní Gtk# podporou zabere méně než 8 MB místa na HDD. Odpověď zní tedy ANO.