2012-09-07 10 views
5

मैं एक विजुअल स्टूडियो पैकेज विकसित कर रहा हूं और मैंने कुछ कोड लिखा है जो सॉल्यूशन एक्सप्लोरर में एक फाइल को दूसरी फाइल पर निर्भर करेगा।अंतर्निहित फ़ाइल को संशोधित करने के बाद मैं एक वीएस परियोजना को प्रोग्रामेटिक रीफ्रेश/पुनः लोड कैसे करूं?

इसका क्या अर्थ है कि यह उन्हें कोड-बैक फाइलों या डिजाइनर फ़ाइलों के समान रिश्ते देता है, जहां वे मूल फ़ाइल के नीचे प्लस/माइनस आइकन के साथ घोंसला दिखाई देते हैं।

+ MainForm.cs 


- MainForm.cs 
    MainForm.Designer.cs 
    MainForm.resx 

कोड है कि मैं सफलतापूर्वक लिखा गया है और सही ढंग से अंतर्निहित प्रोजेक्ट फ़ाइल को संशोधित करता है, लेकिन परिवर्तन समाधान Explorer में प्रतिबिंबित नहीं होता है जब तक परियोजना बंद कर दिया है और फिर से खोला।

मैं कुछ कोड ढूंढ रहा हूं जो प्रोजेक्ट को रीफ्रेश या पुनः लोड करेगा ताकि परिवर्तन तुरंत समाधान एक्सप्लोरर में दिखाई दे।

अतिरिक्त जानकारी ...

यहाँ sudo कोड है कि व्यवस्था है जिसके द्वारा मैं निर्भर फ़ाइल बनाने दर्शाता है।

IVsBuildPropertyStorage vsBuildPropertyStorage = GetBuildPropertyStorage(); 
vsBuildPropertyStorage.SetItemAttribute(projectItemIdentifier, "DependentUpon", parentFileName); 

मैंने प्रोजेक्ट को पुनः लोड करने के प्रयास में इसे जोड़ने का भी प्रयास किया है, लेकिन इसका कोई प्रभाव नहीं पड़ता है।

EnvDTE.DTE dte = ...; 

string solutionName = Path.GetFileNameWithoutExtension(dte.Solution.FullName); 
string projectName = project.Name; 

dte.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer).Activate(); 
((DTE2)dte).ToolWindows.SolutionExplorer.GetItem(solutionName + @"\" + projectName).Select(vsUISelectionType.vsUISelectionTypeSelect); 

dte.ExecuteCommand("Project.UnloadProject"); 
dte.ExecuteCommand("Project.ReloadProject"); 

ध्यान दें कि यदि परियोजना सहेजा नहीं गया है, उपयोगकर्ता एक संवाद मिल जाएगा:

project.Save(); 
VSProject obj = project.Object as VSProject; 
obj.Refresh(); 
+0

प्रोजेक्ट ItemIdentifier के लिए आपके द्वारा उपयोग किए जाने वाले मूल्य को कैसे मिला और क्या आपने रीफ्रेशिंग के लिए एक अच्छा समाधान किया है जिसमें परियोजना को उतारने में शामिल नहीं है? – Colin

+0

@ कोलिन यह प्रोजेक्ट फ़ाइल के एक्सएमएल को मैन्युअल रूप से जोड़कर एक परियोजना के भीतर परिवर्तन करने के लिए एक बल्कि क्रूर-बल तरीका है। एक रीलोड की आवश्यकता होगी लेकिन मुझे ऐसा करने का कोई अच्छा तरीका नहीं मिला। वीएस एपीआई (एनवीडीटीई) के भीतर सही संचालन को ढूंढने और इसके बजाय कॉल करने का एक बेहतर तरीका है। एपीआई के माध्यम से जाना बहुत अधिक मजबूत है और वीएस किसी भी आवश्यक पुनः लोडिंग का ख्याल रखेगा। आप किस ऑपरेशन को करने की कोशिश कर रहे हैं? यदि यह एक निर्भर फ़ाइल जोड़ रहा है तो मैं इसके साथ मदद कर सकता हूं। – Martyn

+0

@ कोलिन क्षमा करें, मैं प्रोजेक्ट ItemIdentifier के साथ मदद नहीं कर सकता। मैं इस या किसी भी समान कोड का उपयोग नहीं कर पाया। वीएस एपीआई अधिक ऑब्जेक्ट उन्मुख है और आप पहचानकर्ता तारों की बजाय ProjectItem ऑब्जेक्ट्स की आपूर्ति करके काम करता है। प्रोजेक्टइटम (प्रोजेक्ट में प्रभावी रूप से फाइलें और फ़ोल्डर्स) को प्रोजेक्ट को पुन: प्राप्त करके पुनर्प्राप्त किया जा सकता है। प्रोजेक्ट इटम्स प्रॉपर्टी। यदि आपको वास्तव में प्रोजेक्ट इटैम इंडेंटिफायर की आवश्यकता है तो मैं डिबगिंग का सुझाव दूंगा और ProjectItem ऑब्जेक्ट के गुणों को देख रहा हूं। – Martyn

उत्तर

8

ऐसा करने का एक ही तरीका है AFAIK समाधान एक्सप्लोरर उपकरण खिड़की के स्वचालन के माध्यम से है "Project.UnloadProject" कॉल से पहले बॉक्स।

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

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