2009-04-06 13 views
40

Bir programın yürütülmesi sırasında Mono çalışma zamanı veya Microsoft çalışma zamanı kullanılarak yürütülüp yürütülmediğini öğrenmek istiyorum.Hangi .NET çalışma zamanının kullanıldığı tespit edilir (MS'ye karşı Mono)?

static bool IsMicrosoftCLR() 
{ 
    return RuntimeEnvironment.GetRuntimeDirectory().Contains("Microsoft"); 
} 

Ancak bu çalışma zamanı yükleme klasöründe bağlı olup ve ben emin değilim: Şu anda bir MS CLR üzerinde olduğum olmadığını belirlemek için aşağıdaki kodu kullanıyorum

Bu tüm kurulumlarda çalışacaktır.

Geçerli çalışma zamanını kontrol etmenin daha iyi bir yolu var mı? Sadece aşağıdaki kodu çalıştırmak bu

bool IsRunningOnMono = (Type.GetType ("Mono.Runtime") != null); 

cevap

69

:

public static bool IsRunningOnMono() 
{ 
    return Type.GetType ("Mono.Runtime") != null; 
} 

Ben emin olun çok daha fazla soru var, bu yüzden bu kılavuzu ve mono-forums

+0

İyi işaretçiler için teşekkürler. –

+5

Sonucun kaydedilmesi (önbellekleme) yapmak isteyebilirsiniz, çünkü her seferinde pahalı olabileceğini düşünmek. –

8

gibi Mono Runtime kontrol edebilirsiniz

5

C# 6'nın gelmesiyle, bu artık bir get-only özelliğine dönüştürülebilir, böylece gerçek kontrol yalnızca bir kez yapılır.

internal static bool HasMono { get; } = Type.GetType("Mono.Runtime") != null; 
4

İşte Projemde kullandığım önbelleğe sahip bir versiyonu bulunuyor: Bunu çok sık aradığınız takdirde

public static class PlatformHelper 
{ 
    private static readonly Lazy<bool> IsRunningOnMonoValue = new Lazy<bool>(() => 
    { 
     return Type.GetType("Mono.Runtime") != null; 
    }); 

    public static bool IsRunningOnMono() 
    { 
     return IsRunningOnMonoValue.Value; 
    } 
} 

söz @ahmet alp balkan gibi, önbelleğe alma burada yararlıdır. Bir Lazy<bool> içinde sarmalayarak yansıma çağrısı yalnızca bir kez olur.

İlgili konular