2009-05-12T04:02:32の更新内容

programming/mono/tips/index.wiki.txt

current previous
1,56 1,7
~
${smdncms:tags,Mono,C#,Tips}
${smdncms:tags,Tips}
 
*Tips
*Tips
~
Monoに関するTips
Mono 1.2に関するTips
 

        

        
+
**使用しているランタイムがMonoかどうか調べる
+
Monoのmscorlib.dllにはMono.Runtimeクラスが含まれているので、この型の情報が取得できるかどうかでランタイムがMonoかそうでないかを調べることが出来る。 ちなみに、Mono.Runtimeクラスはinternalなのでインスタンスは作成できない。
+
 using System;
+
 
+
 class runtime {
+
   public static void Main() {
+
     Console.WriteLine("runtime: {0}", Type.GetType("Mono.Runtime") == null ? ".NET Framework?" : "Mono");
+
     Console.WriteLine("version: {0}", Environment.Version);
+
   }
+
 }
+

          
+
Monoで実行した場合。
+
 runtime: Mono
+
 version: 2.0.50727.1433
+

          
+
.NET Frameworkで実行した場合。
+
 runtime: .NET Framework?
+
 version: 2.0.50727.3082
+

          
+
参考:[[FAQ: Technical - Mono, How can I detect if am running in Mono?:http://mono-project.com/FAQ:_Technical]]
+

          
+
**実行しているプラットフォームがUnixかどうか調べる
+
.NET Framework 2.0以降を使用する場合は、Environment.OSVersion.Platformの値がPlatformID.Unixかどうかで判断できる。 Monoの場合も同様に、2.0以降ではPlatformID.Unixかどうかで判断できる。 一方1.xの場合にはPlatformID.Unixは存在せず、Monoでは代わりに128が割り当てられていたため、ランタイムのバージョンを問わず判断するためにはEnvironment.OSVersion.Platformの値がPlatformID.Unixまたは128かどうかで判断すればよい。
+
以下のサンプルにおいて、
+
-4は.NET Framework 2.0以降のPlatformID.Unixの値
+
-6は.NET Framework 2.0 SP2以降のPlatformID.MacOSXの値
+
を表す。
+
 using System;
+
 
+
 class platform {
+
   public static void Main() {
+
     var p =Environment.OSVersion.Platform;
+
 
+
     //Console.WriteLine("unix? {0}", Environment.OSVersion.Platform == PlatformID.Unix);
+
     Console.WriteLine("unix? {0}",;
+
     Console.WriteLine("version: {0}", Environment.OSVersion);
+
   }
+
 }
+

          
+
Ubuntu 9.04上のMonoで実行した場合。
+
 unix? True
+
 version: Unix 2.6.28.11
+

          
+
Windows XP上の.NET Frameworkで実行した場合。
+
 unix? False
+
 version: Microsoft Windows NT 5.1.2600 Service Pack 3
+

          
+
参考:[[FAQ: Technical - Mono, How to detect the execution platform ?:http://mono-project.com/FAQ:_Technical]]
+

          
 
**gdiplus.dllでSystem.DllNotFoundExceptionとなる
**gdiplus.dllでSystem.DllNotFoundExceptionとなる
 
Fedora 8で起きた問題。 System.Windows.Forms等を使ったアプリケーションを起動するとgdiplus.dllが原因でSystem.DllNotFoundExceptionが発生する。 これは$LD_LIBRARY_PATH(yumでインストールした場合は/usr/lib)にlibgdiplus.soが存在せず、動的リンクに失敗することが原因で起きる。
Fedora 8で起きた問題。 System.Windows.Forms等を使ったアプリケーションを起動するとgdiplus.dllが原因でSystem.DllNotFoundExceptionが発生する。 これは$LD_LIBRARY_PATH(yumでインストールした場合は/usr/lib)にlibgdiplus.soが存在せず、動的リンクに失敗することが原因で起きる。
 
yumでMonoをインストールした場合は/usr/libにはlibgdiplus.so.0というファイル名でインストールされるので、シンボリックリンクを貼ればリンク出来るようになり、System.DllNotFoundExceptionは発生しなくなる。
yumでMonoをインストールした場合は/usr/libにはlibgdiplus.so.0というファイル名でインストールされるので、シンボリックリンクを貼ればリンク出来るようになり、System.DllNotFoundExceptionは発生しなくなる。