2015-07-13 3 views
5

प्रश्न: मैं स्रोत पेड़ प्रतीकों पर अपना व्यक्तिगत दस्तावेज़ीकरण प्रदाता कैसे लागू करूं? जब मैं SymbolFinder.FindSymbolAtPosition()स्रोत पेड़ प्रतीकों के लिए डेटा पर होवर के लिए रोसलीन का उपयोग

विशेष रूप से मैं GetDocumentationForSymbol() फ़ंक्शन को ओवरराइड करना चाहता हूं तो प्रतीक का प्रकार मुझे मिलता है। मैंने इसे अपने स्वतः पूर्ण प्रतीकों के लिए ओवरराइड किया है, लेकिन प्रतीकों को मैं होवर से नहीं प्राप्त करता हूं।

पृष्ठभूमि:

हाय, मैं Roslyn उपयोग कर रहा हूँ एक पाठ संपादक मैं बनाने के लिए कर रहा हूँ IntelliSense इकट्ठा करने के लिए। मुझे जो चीजों को बनाने की ज़रूरत है, उनमें से एक त्वरित जानकारी या टूल टिप्स है। मैं इसे स्वत: पूर्ण सुझावों के लिए काम कर रहा हूं। एक टुकड़ा है कि इस

compilation = CSharpCompilation.Create(
     "MyIntellisense", 
     new[] { CSharpSyntaxTree.ParseText(dotNetCode) }, 
     assemblies 
    .Select(i => MetadataReference 
    .CreateFromFile(i.Location, MetadataReferenceProperties.Assembly, 
    new DotNetDocumentationProvider(
    new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); 

तरह लग रहा है का उपयोग करके यह अपने स्वयं के व्यक्तिगत DotNetDocumentationProvider जो एक्सएमएल और प्रलेखन तरह से मैं इसकी आवश्यकता को पार्स करता है उपयोग करता है। यह असेंबली प्रतीकों के लिए काम करता है जो कि जब मैं सिफारिशकर्ता का उपयोग करता हूं तो मेरे पास प्रतीकों के प्रकार होते हैं। GetRecommendedSymbolsAtPosition()।

संपादित करें: बस और अधिक पृष्ठभूमि :)

मैं दो अलग अलग तरीकों से प्रतीकों मिल देना चाहता था।

var information = symbol.GetDocumentationCommentXml(); 
:

1) एक तरह से जब मैं

var symbols = Recommender.GetRecommendedSymbolsAtPosition(semanticModel, offset, solution.Workspace); 

मैं इस का उपयोग फोन है जब उपयोगकर्ता स्वत: पूर्ण जानकारी के लिए पूछता है इन प्रतीकों मैं के माध्यम से जा सकते हैं के साथ और हर एक कॉल के लिए है

protected override string GetDocumentationForSymbol(string documentationMemberID, CultureInfo preferredCulture, CancellationToken cancellationToken = default(CancellationToken)) 
:

यह अंततः एक समारोह मैं कक्षा DocumentationProvider से अधिरोहित है कॉल 0

2) दूसरा तरीका उपयोगकर्ता घूमता है जब

var symbol = SymbolFinder.FindSymbolAtPosition(semanticModel, offset, workspace, cancellationToken); 

से अधिक मैं ठीक उसी समारोह (फोन वास्तव में कोड की एक ही लाइन से, यह सूखी)

var information = symbol.GetDocumentationCommentXml(); 

लेकिन इस रखने के लिए है मेरे ओवरराइड GetDocumentationCommentXml() को बदले में डिफ़ॉल्ट Roslyn को बुलाया नहीं जाता है।

धन्यवाद!

+0

मानक प्रदाता के साथ क्या गलत है? – SLaks

+0

कौन सा प्रतीक असफल हो रहे हैं? – SLaks

+1

हम अपने संपादक इंटेलिजेंस में quickinfo के माध्यम से प्रलेखन का पर्दाफाश करना चाहते हैं। समस्या यह है कि हमारा स्रोत कोड गतिशील रूप से एक टेम्पलेटेड भाषा (जैसे एएसपी.नेट) से उत्पन्न होता है और इसके परिणामस्वरूप सिंथेटिक नेमस्पेस, क्लास नाम और अन्य चीजों का समूह होता है जो मूल उपयोगकर्ता के सामने कोडिंग करने वाले अंतिम उपयोगकर्ता के संपर्क में नहीं आना चाहिए टेम्पलेट स्रोत। – ReckerDan

उत्तर

1

Not finding all of the symbols I need,How to find more symbols using the Roslyn API

एक और सवाल मैंने पूछा, जब मैं इस मुद्दे को यह तो समस्या मैं यहाँ हो रही थी हल हल किया। समस्या यह है कि मैंने सोचा

_workspace.CurrentSolution.AddMetadataReferences(_currentProject.Id,_compilation.References); 

कार्यक्षेत्र मैं में काम कर रहा था नवीनीकृत किया गया था। लेकिन इसके संदर्भ जोड़े गए एक समाधान देता है नहीं करता है। मुझे

_workspace.TryApplyChanges(referenceSolution); 

को सहेजने के लिए उपयोग करने की आवश्यकता है। लिंक पर मिले मेरे अन्य प्रश्न का उत्तर देने के लिए जेसन के लिए धन्यवाद। यदि आप यहां पोस्ट करते हैं तो मैं इसे एक उत्तर के रूप में चिह्नित करूंगा।

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