2010-09-22 18 views
6

पर आधारित विजुअल स्टूडियो पैकेज का निर्माण करना मैं आयरनस्टूडियो के आधार पर अपना खुद का प्रोजेक्ट प्रकार जोड़ना चाहता हूं। तो,किसी अन्य

  • मैं के लिए स्रोत डाउनलोड किया है और the latest version of IronPython संकलित, तो
  • मैं एक नया दृश्य स्टूडियो पैकेज बनाया।
  • मैंने Templates\Projects\MyProject फ़ोल्डरों को जोड़ा, और इसमें एक फ़ाइल जोड़ा, और अपनी संपत्ति "VSIX में शामिल करें" को सत्य में सेट करें।

तब मुख्य पैकेज वर्ग IronStudio के PythonProjectPackage बजाय से प्राप्त किया जा करने के लिए संशोधित, और ProvideProjectFactory गुण सेट:

[ProvideProjectFactory(
    typeof(PythonProjectFactory), 
    "Django Project", 
    "Django Project Files (*.myproj);*.myproj", 
    "myproj", "myproj", 
    @"Templates\Projects\MyProject", 
    LanguageVsTemplate="MyProject")] 
public sealed class MyPackage : PythonProjectPackage 

और यह भाग गया। लेकिन MyProject परियोजना टेम्पलेट्स में दिखाई नहीं दे रहा है। क्यों नहीं?

उत्पन्न .pkgdef फ़ाइल इस तरह दिखता है:

[$RootKey$\InstalledProducts\VSPackage3Package] 
@="#110" 
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
"PID"="1.0" 
"ProductDetails"="#112" 
"LogoID"="#400" 
[$RootKey$\Packages\{5cd7435c-7461-459f-80bc-c0c79e9d462f}] 
@="Microsoft.VSPackage3.VSPackage3Package, VSPackage3, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a4f1577d825253f8" 
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL" 
"Class"="Microsoft.VSPackage3.VSPackage3Package" 
"CodeBase"="$PackageFolder$\VSPackage3.dll" 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}] 
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\Extensions] 
"py"=dword:00000020 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews] 
"{7651a701-06e5-11d1-8ebd-00a0c90f26ea}"="" 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews] 
"{7651a702-06e5-11d1-8ebd-00a0c90f26ea}"="" 
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews] 
"{7651a703-06e5-11d1-8ebd-00a0c90f26ea}"="" 
[$RootKey$\CLSID\{888888fd-3c4a-40da-aefb-5ac10f5e8b30}] 
@="Microsoft.IronPythonTools.Project.PythonGeneralPropertyPage" 
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL" 
"Class"="Microsoft.IronPythonTools.Project.PythonGeneralPropertyPage" 
"CodeBase"="$PackageFolder$\VSPackage3.dll" 
"ThreadingModel"="Both" 
[$RootKey$\Projects\{888888a0-9f3d-457c-b088-3a5042f75d52}] 
@="PythonProjectFactory" 
"DisplayName"="My Project" 
"DisplayProjectFileExtensions"="My Project Files (*.myproj);*.myproj" 
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
"DefaultProjectExtension"="myproj" 
"PossibleProjectExtensions"="myproj" 
"ProjectTemplatesDir"="$PackageFolder$\Templates\Projects\MyProject" 
"Language(VsTemplate)"="MyProject" 
[$RootKey$\NewProjectTemplates\TemplateDirs\{5cd7435c-7461-459f-80bc-c0c79e9d462f}\/1] 
@="My Project" 
"SortPriority"=dword:00000064 
"TemplatesDir"="$PackageFolder$\Templates\Projects\MyProject" 
[$RootKey$\Projects\{888888a0-9f3d-457c-b088-3a5042f75d52}] 
@="PythonProjectFactory" 
"DisplayName"="IronPython" 
"DisplayProjectFileExtensions"="IronPython Project Files (*.pyproj);*.pyproj" 
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
"DefaultProjectExtension"="pyproj" 
"PossibleProjectExtensions"="pyproj" 
"ProjectTemplatesDir"="$PackageFolder$\.\NullPath" 
"Language(VsTemplate)"="IronPython" 
[$RootKey$\NewProjectTemplates\TemplateDirs\{5cd7435c-7461-459f-80bc-c0c79e9d462f}\/1] 
@="IronPython" 
"SortPriority"=dword:00000064 
"TemplatesDir"="$PackageFolder$\.\NullPath" 
[$RootKey$\Services\{b98e41c4-581e-3532-beee-06829b683d39}] 
@="{5cd7435c-7461-459f-80bc-c0c79e9d462f}" 
"Name"="IPythonStarter" 

मैं सिर्फ नंगे हड्डियों है और चल पाने के लिए तो मैं कुछ कार्यक्षमता (जोड़े नया आइटम संवाद की तरह) अधिभावी शुरू कर सकते हैं चाहता हूँ।

+0

बस ध्यान दिया कि 'PythonProjectFactory' दो बार वहां दिखाई देता है ... शायद यह नहीं होना चाहिए। – mpen

+0

वास्तव में - कृपया ध्यान दें कि अधिक डुप्लीकेट लाइनें हैं जैसे उदा। पिछले GUID, इस पर और अधिक के लिए [मेरा जवाब] (http://stackoverflow.com/q/3766065#3834459) देखें। –

उत्तर

1

इस stackoverflow पोस्टिंग उपयोगी हो सकता है: VS2010: VSIX installation doesn't deploy item templates inside it

यदि यह आपके लिए क्या नहीं देख रहे हैं, तो आप कस्टम परियोजना टेम्पलेट्स के निर्माण के चारों ओर कुछ कमी कर रहे हैं देखने की कोशिश है, मुझे विश्वास है कि जहां है " कड़ी "है:

उम्मीद है कि यह

+1

उनमें से अधिकतर लिंक दिखते हैं कि वे नए प्रोजेक्ट टेम्पलेट्स को कैसे बनाएं, इसका वर्णन करते हैं ... मैंने पहले से ही केक का टुकड़ा किया है। मुझे उस से अधिक शक्ति की आवश्यकता है, हालांकि, मुझे बिल्ड और रन प्रक्रिया को संशोधित करने की आवश्यकता है, और राइट-क्लिक मेनू में आइटम जोड़ें। इसके लिए, मुझे पूरा यकीन है कि मुझे एक VSPackage बनाने की आवश्यकता है। जिसे मैंने यह भी पता लगाया कि कैसे करना है (http://stackoverflow.com/questions/3713503/how-to-create-a-new-project-type-in-vs2010/3713769#3713769), जिस भाग में मैं संघर्ष कर रहा हूं विशेष रूप से, आयरनपीथन का विस्तार कर रहा है। आपका पहला लिंक थोड़ा अधिक प्रासंगिक है (जैसा कि कम से कम एक दिशा सही दिशा में है), – mpen

+0

लेकिन उत्तर मूल रूप से "फिर से देखो" था, जो ... मैंने ... कई बार किया था। – mpen

+0

एक "नया आइटम टेम्पलेट" उन बड़ी सुविधाओं में से एक है जिन्हें मैं कार्यान्वित करना चाहता हूं ... सिवाय इसके कि इसे एक फ़ाइल जोड़ने, दो अन्य संशोधित करने की आवश्यकता है, इसलिए यह थोड़ा और जटिल है। वह, और संदर्भ जागरूक रहें ("हाइलाइट किए गए फ़ंक्शन के लिए नया दृश्य टेम्पलेट बनाएं")। – mpen

0

$ पैकेजफ़ोल्डर $ में मदद करता है। \ NullPath के साथ कुछ करने के लिए कुछ हो सकता है।

+0

वह फ़ाइल स्वत: जेनरेट की गई है ; मुझे यकीन है कि इसके साथ कई त्रुटियां हैं, लेकिन यह देखते हुए कि मैं सीधे उस फ़ाइल को संपादित नहीं कर सकता, यह वास्तव में मदद नहीं करता है। – mpen

5

अद्यतन:

मेरी प्रारंभिक विश्लेषण पढ़ना एक बार फिर से मेरी धारणा है कि आवश्यक घटक के कुछ याद कर रहे हैं बढ़ जाती है (उदाहरण के लिए एक समर्पित ProjectFactory) और/या गलत तरीके से तार - ProvideProjectFactoryAttribute Class की MSDN प्रलेखीकरण से:

ProvideProjectFactoryAttribute घोषणा करता है कि एक पैकेज एक परियोजना कारखाने प्रदान करता है।

और आगे:

एक VSPackage घोषणा करता है कि यह एक परियोजना कारखाने प्रदान करता है, यह कारखाना बना सकते हैं और पैकेज व्युत्पन्न वर्ग के प्रारंभ विधि में दृश्य स्टूडियो के लिए यह पेशकश करनी चाहिए।

आप पैकेज PythonProjectFactory प्रदान करने के लिए की घोषणा है, लेकिन (संभावना) वी.एस. करने के लिए इसे प्रदान नहीं करता है, बल्कि यह IronPython पैकेज द्वारा की पेशकश की है। बदले में आप ProvideProjectFactory विशेषता सूची के भीतर तर्क प्रदान कर रहे हैं जो PythonProjectFactory वीएस द्वारा पूछे जाने पर के बारे में नहीं पता होगा।

इसके परिणामस्वरूप आपको कम से कम ProjectFactory अपने आप को चलने के अनुसार समर्पित करना चाहिए, तदनुसार कक्षाओं को तार देना और देखें कि यह नीचे उल्लिखित मुद्दों के बारे में कैसे पता चलता है।


प्रारंभिक विश्लेषण:

यहाँ पहली नजर में कई मुद्दों प्रतीत - आप ऐसा करने के तरीके के बारे में कोई ट्यूटोरियल का पालन किया है? यदि, कृपया ध्यान दें कि खोज इंजन के माध्यम से आसानी से खोजने योग्य कुछ अभी भी पुराने हैं। किसी भी तरह से मैं वीएस 2010 के लिए एमएसडीएन दस्तावेज से Walkthrough: Part 1 - Creating a Basic Project System के साथ अपने परिणाम के माध्यम से काम करने और/या तुलना करने का प्रयास करूंगा; कृपया ध्यान दें कि पृष्ठ के निचले भाग पर सामुदायिक सामग्री अनुभाग के अनुसार भी इसे पुराना माना जा सकता है।

  • आप पहले से ही महसूस किया डुप्लिकेट टुकड़ा GUID के साथ शुरू है कि:

    यहाँ है कि मैं क्या कोड प्रस्तुत दिए गए अपने आप में देखना चाहते हैं, अधिक जानकारी के लिए मक्खी पर पूर्वाभ्यास के साथ तुलना है PythonProjectFactory से अधिक समझ में नहीं आता है - यह अनिवार्य रूप से दो पैकेजों को एक बार पंजीकृत करने की कोशिश कर रहा है, जो कि अगर सभी वाक्य रचनात्मक रूप से (जो मुझे संदेह है) की अनुमति है, तो संभवतः एक ही GUID के साथ पंजीकृत होने के कारण ऐसा संभवतः काम नहीं कर सकता है [ अनुभाग में नमूना फ़ाइल के साथ क्रॉस चेकिंग टेम्पलेट पंजीकरण पुष्टि की जांच यह संदेह, जैसा कि उम्मीद है कि केवल एक ऐसा टुकड़ा है]।

    • कृपया ध्यान दें कि प्रश्न में GUID एक PythonProjectFactory की पहचान (संबंधित स्रोत कोड के अनुसार), इस बारे में अधिक के लिए नीचे देखें है।
 [Guid(PythonConstants.ProjectFactoryGuid)] 
     public class PythonProjectFactory : ProjectFactory { 
  • .pkgdef को देखते हुए एक उत्पन्न होता है फ़ाइल जहां इस दोहराव/उल्लंघन की वजह से उपजी अगले सवाल है। जब दो उत्पन्न कलाकृतियों एक ही GUID के साथ समाप्त होते हैं तो स्रोतों में संबंधित परिभाषा किसी भी तरह से गड़बड़ हो जाती है, आमतौर पर प्रतिलिपि & पेस्ट डुप्लिकेशन के कारण। नतीजतन आप, के रूप में इरादा को सत्यापित करना चाहिए {5cd7435c-7461-459f-80bc-c0c79e9d462f} परिभाषित और संदर्भित है कि क्या हालांकि यहां एक या दो अन्य कारणों के रूप में अच्छी तरह से इस बात के लिए हो सकता है, नीचे देखें।

  • एक Package class जरूरतों और एक GUID से पहचाना जा करने के लिए वी.एस. जादूगर Guids.cs में कुछ पहले से ही उत्पन्न करता है और संदर्भ तदनुसार वर्ग परिभाषा पर, तथापि, निम्नलिखित अपने टुकड़ा में याद आ रही है [पार नमूना टुकड़ा के साथ की जाँच अनुभाग प्रोजेक्ट टेम्पलेट रजिस्टर करने के लिए में इस चूक की पुष्टि करता है और साथ ही]:

[Guid(GuidList.guidMyPackagePkgString)] 
    public sealed class MyPackage : Package 
  • इसी तरह यह गलत प्रतीत होता है MyPackagePythonProjectPackage से लेकिन संदर्भ PythonProjectFactory अभी भी बल्कि MyFactory प्रदान करने के साथ (एक समर्पित GUID सहित) से प्राप्त करने के लिए, क्योंकि बाद दृश्य स्टूडियो अपनी परियोजना टेम्पलेट फ़ोल्डर के स्थान बताता है [खंड देखें बनाना एक कंकाल परियोजना फैक्टरी]:

    • यह अच्छी तरह से संभव हो सकता है बस आधार वर्ग PythonProjectFactory की सभी सुविधाएं पुन: उपयोग करने, विरासत में होने की संभावना है बस आवश्यकता है क्योंकि कारखाने के रूप में w में उल्लिखित एक समर्पित GUID भी (होना आवश्यक है alkthrough) विशेषता निर्दिष्ट डेटा को व्यवस्थित करने के क्रम में। , * Myproj;

  • संभावना असंबंधित, लेकिन अभी भी संदिग्ध है कि अपने दो कोड ब्लॉक संबंधित नहीं है, के रूप में Package class परिभाषा को निर्दिष्ट Django परियोजना फ़ाइलें (* .myproj) है। फिर भी परिणाम दिखाता है मेरी परियोजना फ़ाइलें (* .myproj); *। myproj

    • क्या आपने इसे अलग-अलग निर्माण से मिश्रित किया है या क्या यह वास्तव में एक साफ परिणाम है?

गुड लक!

+0

यह उत्तर लगता है कि इसमें कुछ योग्यता है, लेकिन मैं जाने के लिए बहुत थक गया हूँ इसके माध्यम से अभी। जब मुझे कुछ समय लगेगा तो इसकी जांच करनी होगी। धन्यवाद! – mpen