मैं कुछ वीएसआईएक्स बना रहा हूं। अब, शुरुआत में, मैं रोसलिन का उपयोग करके कुछ कोड विश्लेषण करता हूं और सभी परियोजनाओं को समाधान से प्राप्त करता हूं:

async Task AnalyzeCode()
{
    foreach (var project in workspace.CurrentSolution.Projects)
        await AnalyzeProject(project);
}


async Task AnalyzeProject(Project project)
    {
        Models.ProjectInfo pi = new Models.ProjectInfo();
        pi.FileName = project.FilePath;
        pi.Name = project.Name;
        pi.Id = project.Id;
        projectsInSolution.Add(pi.Name, pi);

        foreach(var doc in project.Documents)
            await AnalyzeDocument(pi, doc);
    }

और इसी तरह। जैसा कि आप देख सकते हैं, मुझे रोसलिन के प्रोजेक्ट क्लास से ProjectId मिल रहा है। इस ProjectId वर्ग में GUID प्रकार की फ़ील्ड Id है जिसे मैं बाद में सेटिंग्स में सहेजता हूँ।

अब, जब कोई उपयोगकर्ता समाधान एक्सप्लोरर में प्रोजेक्ट नोड पर राइट क्लिक करता है, तो मुझे यह जांचना होगा कि इस चयनित प्रोजेक्ट की व्हीटर आईडी सेटिंग्स में सहेजी गई है। तो मुझे डीटीई का उपयोग कर प्रोजेक्ट आईडी मिलता है:

UIHierarchy solutionExplorer = dte.ToolWindows.SolutionExplorer;
        object[] selectedItems = solutionExplorer.SelectedItems as object[];

        Guid projectGuid;

        if (selectedItems.Length > 0)
        {
            IVsHierarchy hierarchy;
            Project project = (selectedItems[0] as UIHierarchyItem).Object as Project;
            solution.GetProjectOfUniqueName(project.FullName, out hierarchy);

            if(hierarchy != null)                   
                hierarchy.GetGuidProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ProjectIDGuid, out projectGuid);                
        }

लेकिन समस्या यह है कि IVsHierarchy से पढ़ा गया प्रोजेक्टग्यूड अलग है जिसे रोजलिन का उपयोग करके पढ़ा जाता है। इसके अलावा, रोजलिन द्वारा पढ़ा गया ProjectId.Id प्रत्येक एप्लिकेशन के प्रारंभ होने पर भिन्न होता है। बेशक IVsHierarchy से पढ़ा गया प्रोजेक्ट गाइड हमेशा एक जैसा होता है, इसलिए यह वास्तविक वैध प्रोजेक्ट गाइड होना चाहिए।

तो सवाल यह है - रोसलिन का उपयोग करके वास्तविक वैध प्रोजेक्ट गाइड को कैसे पढ़ना चाहिए?

2
Adam Jachocki 12 अक्टूबर 2020, 13:09

1 उत्तर

सबसे बढ़िया उत्तर

प्रोजेक्ट आईडी में जो GUID है वह वह है जिसे हम हर बार प्रोजेक्ट लोड होने पर उत्पन्न करते हैं। यह थोड़ा फंकी भी है क्योंकि एक परियोजना के मामले में कई ढांचे को लक्षित करने के लिए आपके पास प्रत्येक के लिए एक अलग आईडी और GUID होगा, भले ही यह विजुअल स्टूडियो के अन्य हिस्सों की परिभाषा के अनुसार एक 'प्रोजेक्ट' है।

यदि आप अपने कार्यक्षेत्र को VisualStudioWorkspace पर डालते हैं तो आपके पास अपने निपटान में कुछ और तरीके हैं। ऐसा लगता है कि हमारा

Jason Malinowski 12 अक्टूबर 2020, 17:49