6

मेरे पास Project उदाहरण है, और मुझे समझ में नहीं आता कि परियोजना प्रकार/भाषा कैसे पता लगाना है। विशेष रूप से, मुझे सी/सी ++ प्रोजेक्ट की जांच करने की आवश्यकता है।यह निर्धारित करने के लिए कि EnvDTE.Project ऑब्जेक्ट एक सी/सी ++ प्रोजेक्ट का प्रतिनिधित्व करता है या नहीं?

docs की कमी लग रही है।

इससे पहले, एक अन्य व्यक्ति मेरी खुला स्रोत वी.एस. विस्तार करने के लिए जादू की निम्न बिट जोड़ा, और यह VS2013-2015 में काम किया:

private static bool isVisualCppProject(object project) 
{ 
    Type projectObjectType = project.GetType(); 
    var projectInterface = projectObjectType.GetInterface("Microsoft.VisualStudio.VCProjectEngine.VCProject"); 
    return projectInterface != null; 
} 

    ... 

isVisualCppProject(project.Object); 

लेकिन यह नहीं रह गया है वी.एस. 2017 आर सी में काम करता है। और मैं इस रनटाइम प्रतिबिंब जादू से छुटकारा पाउंगा और object और dynamicProject के बजाय dynamic से संतुष्ट हूं - इस कारण कोड पहले से ही अनजान हो रहा है।

+0

'envdte.project' के लिए' Kind' property (https://msdn.microsoft.com/en-us/library/envdte.project.kind.aspx) है। यह GUID है। 'PrjKind' (https://msdn.microsoft.com/en-us/library/vslangproj.prjkind.aspx) में पूर्वनिर्धारित परियोजना प्रकार हैं लेकिन ऐसा लगता है कि सी/सी ++ के लिए कोई संपत्ति नहीं है। मुझे लगता है कि आप वह GUID प्राप्त कर सकते हैं और यह सभी सी/सी ++ परियोजनाओं के लिए समान होगा। –

+0

@AramKocharyan: मैंने 'दयालु' देखा, लेकिन संभवतः "प्रकार" की कोई सूची नहीं है, न ही कोई गारंटी है कि यह वास्तव में विभिन्न मशीनों, प्रतिष्ठानों और वीएस संस्करणों में स्थिर है ... –

+0

@ व्हायोलेट-जिराफ: क्या आप इसे हल करते हैं मुद्दा? यदि समस्या अभी भी मौजूद है, तो कृपया मुझे बेझिझक बताएं। –

उत्तर

1

आप प्रोजेक्ट एक्सटेंशन नाम के माध्यम से प्रोजेक्ट प्रकार और आपके संदर्भ के लिए निम्नलिखित डेमो निर्धारित कर सकते हैं।

DTE2 dte = (DTE2)this.ServiceProvider.GetService(typeof(DTE)); 
      Solution2 solution = (Solution2)dte.Solution; 

      foreach (Project p in solution.Projects) 
      { 

       string[] projectName = p.FullName.Split('.'); 

       if (projectName.Length > 1) 
       { 
        string fileExt = projectName[projectName.Length-1]; 

        if (fileExt == "vcxproj") 
        { 
         //is c/c++ porject 
        } 
       } 
} 
1

EnvDTE.Project.Kind उपरोक्त टिप्पणियों में उल्लिखित, जैसा दिखने वाला पहला स्थान है। देखें HOWTO: Guess the type of a Visual Studio project from an add-in or macro

कुछ प्रसिद्ध GUIDs की एक सूची है, INFO: List of known project type Guids देखें।

आप शायद {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} में रुचि रखते हैं। लेकिन एक परियोजना में विभिन्न उप-प्रकार हो सकते हैं, इस मामले में कई GUID लागू होते हैं। उदाहरण के लिए एमवीसी + सी #। HOWTO: Get the project flavor (subtype) of a Visual Studio project from an add-in

EnvDTE.Project.Kind में मुख्य प्रोजेक्ट प्रकार होता है और इसकी गारंटी नहीं है कि उदा। इस संपत्ति में सी ++ GUID संग्रहीत किया जाएगा। एक परियोजना पर लागू सभी GUID को पुनर्प्राप्त करने का सबसे सुरक्षित तरीका है। अंतिम लिंक से GetProjectTypeGuids विधि का उपयोग करें। आपको सभी GUID की सूची मिल जाएगी और फिर आप जांच लेंगे कि इसमें {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942} है।

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

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