2012-02-08 17 views
5

मेरे पास एक विजुअल स्टूडियो पैकेज है जो बाहरी प्रक्रिया शुरू करके अपने कुछ काम करता है (System.Diagnostics.Process का उपयोग करके) और मानक इनपुट/आउटपुट पर इसके साथ संचार कर रहा है। वर्तमान में, मेरे पास .exe हार्ड-कोडेड का मार्ग है जो स्पष्ट रूप से एक्सटेंशन को तैनात करने के लिए व्यावहारिक नहीं है। एक्सटेंशन के साथ .exe को पैकेज और वितरित करने का सही तरीका क्या है? (और, संबंधित, एक बार ऐसा करने के बाद, मैं प्रोग्राम्सैटिक रूप से स्थापित .exe फ़ाइल के पथ को कैसे खोजूं।) अधिमानतः मैं इसे .vsix फ़ाइल में रखना चाहता हूं ताकि इंस्टॉलेशन आसान हो।पैकेज .exe में .vsix और विजुअल स्टूडियो एक्सटेंशन से कॉल करें

संपादित करें: मैं रखा है BitBucket पर अपने कोड के प्रासंगिक भाग (यह किसी और रोसलिन उपयोग करने के लिए उपयोगी हो सकता है): आदेश मुझे क्या करना है कोशिश कर रहा हूँ का एक बेहतर विचार देने के लिए roslyn_process। यह कोड AbstractProcessHandler के कार्यान्वयन का उपयोग करके विजुअल स्टूडियो एक्सटेंशन के बीच संचार स्थापित करता है और RoslynProcess का उपयोग करके एक अलग प्रक्रिया है। उत्तरार्द्ध को विजुअल स्टूडियो में कोड फ़ाइलों में संशोधनों के बारे में सूचित किया जाता है और कौन सी कोड फ़ाइल देखी जा रही है, इसलिए यह विजुअल स्टूडियो एक्सटेंशन के रूप में नहीं चलने के बावजूद अद्यतित जानकारी के साथ विश्लेषण करने में सक्षम है जो सीमाओं को लागू करेगा सभी कोड पर Roslyn संपादित किया जा रहा है।

संपादित करें 2:this answer का उपयोग करना, मैं विस्तार की सूची प्राप्त कर सकते हैं। मैं सामग्री सूची में इसे "कस्टम एक्सटेंशन प्रकार" के रूप में जोड़कर source.extension.vsixmanifest में एक और पैकेज शामिल कर सकता हूं। फिर .exe एक्सटेंशन की निर्देशिका में दिखाई देता है। ऐसा लगता है कि यह संभवतः सही समाधान है हालांकि निर्देशिका प्राप्त करने का तरीका एमएसडीएन में लेबल किया गया है जैसा कि मुझे उपयोग नहीं करना चाहिए।

ऐसा लगता है कि यह ऐसा करने का सबसे अच्छा तरीका हो सकता है, भले ही यह हैकिश लगता है, इस मामले में मैं सब कुछ काम करने के बाद इसे एक उत्तर के रूप में पोस्ट करूंगा।

+1

@Kiquenet: क्षमा करें, मेरे पास एक अच्छी तरह से पैक किया गया न्यूनतम समाधान नहीं है ... लेकिन स्वीकृत उत्तर एक लाइनर है। – perelman

उत्तर

5

इस के सबसे सरल दृष्टिकोणों में से एक है आपके पैकेज में डीएलएल के पास EXE का एक प्रोजेक्ट संदर्भ है और आपकी एंट्री पॉइंट क्लास (या EXE के भीतर कुछ कक्षा) सार्वजनिक हो। तो फिर तुम सिर्फ लिख सकते हैं:

typeof(ExternalProcess).Assembly.Location 

जो आप अपने विस्तार पथ के अंदर EXE करने के लिए पथ देता है।

इसके बारे में अन्य अच्छा हिस्सा यह है कि VSIX पैकेजर को EXSI को VSIX में स्वचालित रूप से शामिल करना चाहिए क्योंकि यह एक परियोजना संदर्भ है। EXE के लिए आपको अपने .vixixmanifest में कुछ भी डालना नहीं है।

+0

क्योंकि जब मैंने यह कोशिश की: एक EXE (जिसे नैन्सीएफएक्स संदर्भित किया गया) शामिल है, उसने मुझे बताया कि नैन्सीएफएक्स मजबूत नाम नहीं था, और निर्माण विफल रहा। –

+0

"यह" क्या था? किसी भी मामले में, यहां एक और प्रश्न शुरू करना इस पर बातचीत से कहीं अधिक उचित है। –

+0

मेरे पास कोई प्रश्न नहीं है - मेरे पास एक चेतावनी है: जब आप वीएस 2012 एसडीके का उपयोग करके वीएसपीकेज बनाते हैं, तो टेम्पलेट मजबूत नामकरण सक्षम वाला एक प्रोजेक्ट बनाता है। यदि आप उस परियोजना में किसी और चीज का संदर्भ लेते हैं, तो इसे मजबूत नाम दिया जाना चाहिए, क्योंकि मजबूत नामकरण संक्रमणीय है। बेशक –

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

  • कोई संबंधित समस्या नहीं^_^