2009-04-06 10 views
40

मैं किसी प्रोग्राम के निष्पादन के दौरान जानना चाहता हूं कि इसे मोनो रनटाइम या माइक्रोसॉफ्ट रनटाइम का उपयोग करके निष्पादित किया जा रहा है या नहीं।यह पता लगाने के लिए कि कौन सी .NET रनटाइम का उपयोग किया जा रहा है (एमएस बनाम मोनो)?

मैं वर्तमान में निर्धारित करने के लिए मैं एक एमएस CLR पर हूँ निम्नलिखित कोड का उपयोग कर रहा:

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

हालांकि, इस क्रम की स्थापना फ़ोल्डर पर कुछ हद तक निर्भर है और मैं है कि क्या यकीन नहीं है यह सभी प्रतिष्ठानों पर काम करेगा।

क्या वर्तमान रनटाइम की जांच करने का कोई बेहतर तरीका है?

उत्तर

69

मोनो परियोजना की Guide to Porting Winforms Applications से:

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

मैं सुनिश्चित करें कि आपके पास बहुत अधिक प्रश्न होंगे, इसलिए इस मार्गदर्शिका की जांच करने के लायक और mono-forums

+0

अच्छे पॉइंटर्स के लिए धन्यवाद। –

+5

आप परिणाम को भी कैश करना चाहते हैं (कैश) भी, प्रतिबिंब कॉलिंग हर बार महंगी हो सकती है। –

21

आप मोनो रनटाइम के लिए जाँच कर सकते हैं इस

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

की तरह बस नीचे दिए गए कोड को चलाने ..

static bool IsMicrosoftCLR() 
{ 
    return (Type.GetType ("Mono.Runtime") == null) 
} 
5

सी # 6 के आगमन के साथ, अब इसे केवल एकमात्र संपत्ति में बदल दिया जा सकता है, इसलिए वास्तविक जांच केवल एक बार की जाती है।

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

यहाँ है कि मैं अपने प्रोजेक्ट में उपयोग कर रहा हूँ कैशिंग के साथ एक संस्करण है:

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; 
    } 
} 

@ahmet अल्प बाल्कन उल्लेख किया है, कैशिंग यहाँ उपयोगी है अगर आप इस अक्सर कॉल कर रहे है। इसे Lazy<bool> में लपेटकर, प्रतिबिंब कॉल केवल एक बार होता है।

संबंधित मुद्दे

 संबंधित मुद्दे