2012-06-18 24 views
10

के अंदर विजुअल स्टूडियो संस्करण का पता लगाएं मैं अपने VSPackage के अंतर्गत कौन सा विजुअल स्टूडियो संस्करण चल रहा/सकती हूं?एक VSPackage

मैं रजिस्ट्री से नहीं प्राप्त कर सकता क्योंकि कंप्यूटर में कई संस्करण स्थापित हो सकते हैं, इसलिए मुझे लगता है कि एक एपीआई है जो इसे प्राप्त करने में सक्षम है।

कोई भी जानता है कि इसे प्रबंधित दृश्य स्टूडियो पैकेज से सी # का उपयोग करके कैसे प्राप्त किया जाए?

उत्तर

8

अंत में मैं दृश्य स्टूडियो संस्करण का पता लगाने के एक वर्ग ने लिखा है। परीक्षण और काम:

public static class VSVersion 
{ 
    static readonly object mLock = new object(); 
    static Version mVsVersion; 
    static Version mOsVersion; 

    public static Version FullVersion 
    { 
     get 
     { 
      lock (mLock) 
      { 
       if (mVsVersion == null) 
       { 
        string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "msenv.dll"); 

        if (File.Exists(path)) 
        { 
         FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(path); 

         string verName = fvi.ProductVersion; 

         for (int i = 0; i < verName.Length; i++) 
         { 
          if (!char.IsDigit(verName, i) && verName[i] != '.') 
          { 
           verName = verName.Substring(0, i); 
           break; 
          } 
         } 
         mVsVersion = new Version(verName); 
        } 
        else 
         mVsVersion = new Version(0, 0); // Not running inside Visual Studio! 
       } 
      } 

      return mVsVersion; 
     } 
    } 

    public static Version OSVersion 
    { 
     get { return mOsVersion ?? (mOsVersion = Environment.OSVersion.Version); } 
    } 

    public static bool VS2012OrLater 
    { 
     get { return FullVersion >= new Version(11, 0); } 
    } 

    public static bool VS2010OrLater 
    { 
     get { return FullVersion >= new Version(10, 0); } 
    } 

    public static bool VS2008OrOlder 
    { 
     get { return FullVersion < new Version(9, 0); } 
    } 

    public static bool VS2005 
    { 
     get { return FullVersion.Major == 8; } 
    } 

    public static bool VS2008 
    { 
     get { return FullVersion.Major == 9; } 
    } 

    public static bool VS2010 
    { 
     get { return FullVersion.Major == 10; } 
    } 

    public static bool VS2012 
    { 
     get { return FullVersion.Major == 11; } 
    } 
} 
+0

यह समाधान DTE.Version की तुलना में समझ में आता है, क्योंकि जल्द या बाद में डीटीई को वीएस एपीआई से हटा दिया जाएगा (वैसे ही वीएस एडिन प्रौद्योगिकी को हटा दिया गया है)। प्रस्तावित कोड को fvi.FileMajorPart और fvi.FileMinorPart का उपयोग करके बढ़ाया जा सकता है जो दो पूर्णांक देता है, यह प्रस्तावित कोड में स्ट्रिंग पार्सिंग भाग से बचाता है। –

+0

+1 क्योंकि यह कोड पूर्ण संस्करण (उदा। 11.0.61030.00) पुनर्प्राप्त करता है जिसका उपयोग VS के अद्यतन-स्तर का अनुमान लगाने के लिए किया जा सकता है। डीटीई। संस्करण केवल लौटाता है उदा। "11.0" –

+0

devenv.dexe पर msenv.dll को प्राथमिकता देने का कोई कारण? बस उत्सुक। इसके अलावा: आश्चर्य है कि वास्तव में लॉकिंग की आवश्यकता है या नहीं? –

14

आप स्वचालन डीटीई ऑब्जेक्ट के माध्यम से संस्करण प्राप्त करने का प्रयास कर सकते हैं। MPF में आप इसे इस तरह मिल सकता है:

EnvDTE.DTE dte = (EnvDTE.DTE)Package.GetGlobalService(typeof(EnvDTE.DTE)); 

वहाँ कुछ अन्य संबंधित बातें DTE वस्तु पुनः प्राप्त करने के होते हैं - Project.DTE के माध्यम से, यह भी this thread पढ़ा अगर आप DTE के लिए अशक्त हो रही है।

फिर आप DTE.Version property का उपयोग करके संस्करण प्राप्त कर सकते हैं।

इसके अलावा उपयोगी जानकारी (ऐड निंजा वी.एस.) कार्लोस क्विंटरो पर पाया जा सकता है वेबसाइट HOWTO: Detect installed Visual Studio editions, packages or service packs

+0

विजुअल स्टूडियो 2010 इस संपत्ति रिटर्न "10.0" और "12.0" के लिए दृश्य स्टूडियो के लिए 2013 – Wolf5

+0

यह संभव पाने के लिए है डीटीई का उपयोग कर वीएस अपडेट नंबर (उदाहरण के लिए अद्यतन 3)? – Bandara

2

मुझे लगता है कि निम्नलिखित कोड बेहतर है:

string version = ((EnvDTE.DTE) ServiceProvider.GlobalProvider.GetService(typeof(EnvDTE.DTE).GUID)).Version;