2013-07-12 13 views
5

मैं कैसे एक VSIX परियोजना है कि कुछ कस्टम MVC परियोजना प्रकार जोड़ देगा का निर्माण करने के बारे में इस पोस्ट निम्नलिखित किया गया है:VSIX परियोजना टेम्पलेट्स और NuGet साथ संकुल

http://www.asp.net/mvc/tutorials/mvc-4/custom-mvc-templates

मैं भी कुछ अतिरिक्त Nuget संकुल शामिल करना चाहते हैं , इसलिए मैं this page from Nuget का पालन कर रहा था, लेकिन ऐसा लगता है कि यह वीएस -2010 के लिए है और मैं 2012 में काम कर रहा हूं।

मेरे पास प्रोजेक्ट बिल्डिंग है, और सब कुछ मेरी मशीन पर आड़ू काम करता है। इंस्टॉल काम करता है, नया प्रोजेक्ट प्रकार प्रकट होता है, और जब मैं इस प्रकार की एक नई प्रोजेक्ट बनाता हूं, तो सब कुछ पूरी तरह से काम करता है।

हालांकि, जब मैं एक सहकर्मी को इंस्टॉलर भेजता हूं, चीजें तोड़ती हैं। इंस्टॉलर काम करता है, वे नया प्रोजेक्ट प्रकार देखते हैं, लेकिन प्रोजेक्ट बनाने के दौरान उन्हें एक्सटेंशन नोड में किसी भी पैकेज को इंस्टॉल करने में सक्षम नहीं होने के बारे में त्रुटि संदेश मिलते हैं। मैंने पुष्टि की है कि एक्सटेंशन का उत्पाद आईडी सही है (मैंने जानबूझकर परीक्षण के दौरान .vstemplate फ़ाइल में इसे विकृत कर दिया और यह एक पूरी तरह से अलग त्रुटि दे दी)। मैंने विस्तार मैनिफेस्ट में संकुल जोड़े हैं, लेकिन ऐसा कोई फर्क नहीं पड़ता है। मैंने यह भी पुष्टि की है कि .nupkg फ़ाइलों को% ProgramFiles (x86)% \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ एक्सटेंशन पर तैनात किया गया है।

क्या करना है इसके बारे में कोई सुझाव?

कस्टम परियोजना की .vstemplate अनुभाग

<WizardExtension> 
    <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> 
    <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> 
</WizardExtension> 
<WizardData> 
    <packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true"> 
     <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" /> 
     <package id="jQuery" version="1.8.2" /> 
     <!-- snip --> 
    </packages> 
    <packages repository="extension" repositoryId="SampleExtensionId"> 
     <package id="Unity" version="3.0.1304.0" targetFramework="net45" /> 
     <package id="Unity.WebAPI" version="0.10" targetFramework="net45" /> 
     <!-- snip --> 
    </packages> 
</WizardData> 

source.extension.vsixmanifest एसेट टैग

<Assets> 
    <Asset d:VsixSubPath="ProjectTemplates\CustomMVCTemplate" etc/> 
    <Asset Type="Unity.3.0.1304.0" Path="Packages\Unity.3.0.1304.0.nupkg" /> 
    <Asset Type="Unity.WebAPI.0.10" Path="Packages\Unity.WebAPI.0.10.nupkg" /> 
    <!-- snip --> 
</Assets> 

फ़ाइल संरचना

  • एक्सटेंशन परियोजना
    • संकुल
      • NugetPackage 1
      • NugetPackage 2
      • आदि
    • ProjectTemplates
      • CustomMVCTemplate
        • < कस्टम परियोजना फाइलों >
    • source.extension.vsixmanifest

उत्तर

1

इस लिंक http://samritchie.net/2012/09/17/nuget-packages-in-vs2012-templates/ जो मुझे मदद की जाँच बाहर। हालांकि, मैं अभी भी इस मुद्दे पर चल रहा हूं जहां मेरे सभी संदर्भ 'पथ खाली हैं।

नोट विशेष रूप से लेख से निम्नलिखित टिप्पणी ऊपर लिंक:

मैं समय के एक काफी अवधि खर्च बाहर काम करने के क्या CustomExtension की v2 बराबर था प्रयास, लेकिन एक लंबे कहानी कम कटौती करने के लिए, आपके पास .vsixmanifest में कोई भी परिवर्तन करने की आवश्यकता नहीं है - VSIX में सभी संकुल को 'पैकेज' निर्देशिका के अंतर्गत शामिल करना पर्याप्त है।

+0

बहुत बढ़िया खोज। मैंने आपके उत्तर में भी सीधे पैराग्राफ जोड़ा। – Olly

4

मैंने एक वीएसआईएक्स बनाने के तरीके पर एक चरण-दर-चरण वीडियो बनाया है जो स्वतः डाउनलोड nuget संकुल को डाउनलोड करता है।

http://www.youtube.com/watch?v=_ZvsFz41H-E

के बाद से वहाँ कई कदम उठाए जाते हैं और मैं कभी नहीं उन्हें नीचे लिखा था, मैं उन्हें यहाँ टाइप नहीं होंगे। मैंने निश्चित रूप से अन्य लोगों की मशीन पर अपने वीएसआईएक्स पैकेज का परीक्षण किया है और यह उम्मीद है कि यह आपके लिए काम करेगा।

+0

किसी भी व्यक्ति के लिए जो प्रासंगिक भाग में रूचि रखता है, यह [22:47] (http://www.youtube.com/watch?feature=player_detailpage&v=_ZvsFz41H-E#t=1367) – KyleMit

+3

दुर्भाग्य से डाउनलोड नहीं होता है । इस तरह, पैकेज को अभी परियोजना में जोड़ा गया है यदि वे पहले ही डाउनलोड हो चुके हैं। – hakan

0

NuGet संकुल के नवीनतम संस्करण को डाउनलोड करने के साथ ही उनकी सभी निर्भरता अपने vsix को एक के बाद वर्ग जोड़ें:

public class MyProjectWizard : IWizard 
{ 
    IEnumerable<string> _packages; 

    public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) 
    { 
     if (customParams.Length > 0) { 
      var vstemplate = XDocument.Load((string)customParams[0]); 
      _packages = vstemplate.Root 
       .ElementsNoNamespace("WizardData") 
       .ElementsNoNamespace("packages") 
       .ElementsNoNamespace("package") 
       .Select(e => e.Attribute("id").Value) 
       .ToList(); 
     } 
    } 

    public void ProjectFinishedGenerating(Project project) 
    { 
     var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel)); 
     var _installer = componentModel.GetService<IVsPackageInstaller2>(); 

     foreach (var package in _packages) { 
      _installer.InstallLatestPackage(null, project, package, false, false); 
     } 
    } 
} 

और फिर vstemplate में निम्नलिखित का उपयोग करें:

<WizardExtension> 
    <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=22c2a1a5fa7b6905</Assembly> 
    <FullClassName>MyProjectWizard.MyProjectWizard</FullClassName> 
    </WizardExtension> 
संबंधित मुद्दे