2014-12-31 8 views
7

मैं VSTemplate का उपयोग कर विजुअल स्टूडियो के लिए मल्टीप्रोजेक्ट टेम्पलेट बना रहा हूं।बाहरी स्टूडियो प्रोजेक्ट टेम्पलेट बाहरी निर्देशिका में समाधान फ़ाइल बनाने

मैं प्रोजेक्ट टेम्पलेट के लिए नया हूं और विजुअल स्टूडियो के लिए बहु प्रोजेक्ट टेम्पलेट बनाने के लिए इस url को रेफर कर रहा हूं।

<VSTemplate Version="2.0.0" Type="ProjectGroup" 
    xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> 
    <TemplateData> 
    <Name>MVC with Repo and UoW</Name> 
    <Description>Basic by Jenish</Description> 
    <Icon>Icon.ico</Icon> 
    <ProjectType>CSharp</ProjectType> 
    <ProjectSubType> 
    </ProjectSubType> 
    <SortOrder>1000</SortOrder> 
    <CreateNewFolder>false</CreateNewFolder> 
    <DefaultName>MVC</DefaultName> 
    <ProvideDefaultName>true</ProvideDefaultName> 
    <LocationField>Enabled</LocationField> 
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton> 
    </TemplateData> 
    <TemplateContent> 
    <ProjectCollection> 

      <ProjectTemplateLink ProjectName="$safeprojectname$.Common"> 
      KLS.Common\MyTemplate.vstemplate 
      </ProjectTemplateLink> 



      <ProjectTemplateLink ProjectName="$safeprojectname$.Data.Contract"> 
      KLS.Data.Contract\MyTemplate.vstemplate 
      </ProjectTemplateLink> 
      <ProjectTemplateLink ProjectName="$safeprojectname$.Data.Repositories"> 
      KLS.Data.Repositories\MyTemplate.vstemplate 
      </ProjectTemplateLink> 



      <ProjectTemplateLink ProjectName="$safeprojectname$.Manager"> 
      KLS.Manager\MyTemplate.vstemplate 
      </ProjectTemplateLink> 



      <ProjectTemplateLink ProjectName="$safeprojectname$.Models"> 
      KLS.Models\MyTemplate.vstemplate 
      </ProjectTemplateLink> 


     <ProjectTemplateLink ProjectName="$safeprojectname$.Web"> 
     KLSFoods\MyTemplate.vstemplate 
     </ProjectTemplateLink> 

    </ProjectCollection> 
    </TemplateContent> 
    <WizardExtension> 
    <Assembly>RestTemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c9a76f51a8a9555f</Assembly> 
    <FullClassName>RestTemplateWizard.RootWizard</FullClassName> 
    </WizardExtension> 
</VSTemplate> 

स्क्रीनशॉट 1:

enter image description here

के अनुसार ऊपर स्क्रीन गोली मार दी छोड़कर संकुल प्रत्येक परियोजना के लिए अलग vstemplate फ़ाइल Mytemplate.vstemplate मुख्य जड़ फ़ाइल और सभी फ़ोल्डर है।

अब समस्या यह है कि मैं उसी स्क्रीन को उत्पन्न करना चाहता हूं क्योंकि यह पहले स्क्रीन शॉट पर दिखाई देता है लेकिन यह बाहरी निर्देशिका में समाधान उत्पन्न करता है। स्क्रीन शॉट 1 के अनुसार समाधान बनाने के लिए टेम्पलेट को मजबूर करने का कोई तरीका है।

टेम्पलेट वर्तमान में इस तरह का समाधान उत्पन्न कर रहा है।

स्क्रीनशॉट 2:

enter image description here

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

अग्रिम धन्यवाद देता है।

+0

साल पहले या तो मुझे एक ही समस्या का सामना करना पड़ा। मुझे मिली सबसे अच्छी चर्चा [यह एक] है (http://stackoverflow.com/questions/3882764/issue-with-visual-studio-template- निर्देशिका-creation)। व्यक्तिगत रूप से, मैंने कई परियोजना टेम्पलेट्स को छोड़ दिया। कम से कम अभी के लिए। –

+0

ने कभी जवाब दिया है? – lordkain

+0

@ लॉर्डकेन नहीं, मैं इसे मजेदार बनाने के लिए कर रहा था। यह आधिकारिक असाइनमेंट नहीं था इसलिए मैंने इसे तरफ रखा। –

उत्तर

-1

यह मेरे लिए सही लग रहा है। और यदि आप यूआरएल में प्रलेखन को देखते हैं तो आपको लगता है कि यह सही तरीके से काम कर रहा है।

समाधान प्रोजेक्ट फ़ोल्डरों के समान निर्देशिका में बैठना चाहिए। यदि आप स्क्रीनशॉट 1 देखते हैं, तो ऐसा लगता है कि क्या हो रहा है। ऐसा लगता है कि आपके उदाहरण में आप केवल एक ही प्रोजेक्ट बना रहे हैं जिसे एमवीसी 1 कहा जाता है जो एमवीसी 1 नामक समाधान में एकमात्र परियोजना है। आपके द्वारा प्रदान किया गया कोड स्निपेट भी स्क्रीनशॉट 2 से मेल नहीं खाता है। आप उस टेम्पलेट फ़ाइल को भी शामिल करना चाहते हैं जिसका आप वास्तव में समाधान उत्पन्न करने के लिए उपयोग कर रहे हैं।

+0

नहीं, मैं केवल एक परियोजना एमवीसी 1 नहीं बना रहा हूं। स्क्रीनशॉट 1 में मौजूद सभी प्रोजेक्ट स्क्रीनशॉट 2 के एमवीसी 1 फ़ोल्डर के अंदर है। क्या इसका कोई मतलब है? मैंने प्रदान किया एक्सएमएल वह है जो सभी परियोजनाओं को समूहित करता है। –

+2

ठीक है, आपने स्पष्ट रूप से प्रश्न को ठीक से नहीं पढ़ा है। थ्रेडस्टार्टर क्या कह रहा है कि एक अतिरिक्त फ़ोल्डर बनाया गया है, जो vstemplate फ़ाइल में दिखाई नहीं देता है। –

+0

आह, मैंने गलत समझा। उसके लिए माफ़ करना! – Mothbawls

1

मुझे एक ही समस्या थी, मेरा कामकाज समाधान फ़ाइल (* .sln) को संपादित करना था और फ़ाइल को अपेक्षित फ़ोल्डर में ले जाना था।

इस फ़ोल्डर में टेम्पलेट (मैं क्या उम्मीद कर रहा था नहीं) द्वारा उत्पन्न संरचना होती है:

मेरे समाधान फ़ोल्डर:

नोटिस परियोजनाओं के एक ही फ़ोल्डर में नहीं .sln फ़ाइल

:

enter image description here

फ़ोल्डर DDD_Backend10xxxx, सभी परियोजनाओं में शामिल है

enter image description here

चरण 1: ले जाएं।सभी परियोजनाओं युक्त उप फ़ोल्डर में SLN फ़ाइल (परियोजना में काम करने के लिए आवश्यक के रूप में):

enter image description here

* .sln फ़ाइल परियोजनाओं के बाकी के साथ एक ही फ़ोल्डर में ले जाया

enter image description here

.sln फ़ाइल परियोजना फ़ोल्डरों के साथ और सही समाधान फ़ोल्डर स्तर में है।

चरण 2: खुला और .sln फ़ाइल को संपादित और संशोधित सभी परियोजनाओं के रास्तों:

  • पथ को संपादित नहीं किया है कि कारण त्रुटियों:

परियोजना ("{ 2150E333-8FDC-42A3-9474-1A3956D46DE8} ") =" BusinessLayer "," DDD_Backend10xxxx \ BusinessLayer "" {F9E1B70C-F692-414B-97C6-BCEC22F6C1F3} " EndProject

परियोजना ("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusinessLayer", "DDD_Backend10xxxx \ BusinessLayer \ BusinessLayer.csproj" "{0CF94CF4-97C6-4079-8F60-672CBE9B77D5}" EndProject

// अन्य परियोजना के संदर्भ ...

  • फिक्स्ड संपादित पथ: पथ से फ़ोल्डर "DDD_Backend10xxxx" को दूर

पी roject ("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BusinessLayer", "BusinessLayer" "{F9E1B70C-F692-414B-97C6-BCEC22F6C1F3}" EndProject

परियोजना ("{FAE04EC0- 301F-11D3-BF4B-00C04F79EFBC} ") =" BusinessLayer "," BusinessLayer \ BusinessLayer.csproj "" {0CF94CF4-97C6-4079-8F60-672CBE9B77D5} " EndProject

// अन्य परियोजना के संदर्भ ...

चरण 3: प्राथमिक/रूट प्रोजेक्ट root_project_name.csproj फ़ाइल को nuget एक्सटेंशन संदर्भ पथ के लिए संशोधित करें। , संकुल फ़ोल्डर में कोई भी संदर्भ को संशोधित करें ताकि वे एक ही फ़ोल्डर स्तर में संकुल फ़ोल्डर संदर्भ जाएगा। अर्थात्।

से: आयात परियोजना = ".... \ संकुल \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1

रहे हैं: आयात परियोजना =" .. \ संकुल \ Microsoft.CodeDom.Providers .DotNetCompilerPlatform.1

यह nuget पैकेज अद्यतन या स्थापना के लिए एक आवश्यक संदर्भ है।

enter image description here

चरण 4: अद्यतन करने के लिए/संकुल बहाल भागो nuget। एक बार nuget अद्यतन/संकुल को पुनर्स्थापित करता है एक "संकुल" फ़ोल्डर सही फ़ोल्डर स्तर में बनाया जाएगा।

+0

आपके उत्तर के लिए धन्यवाद। मैंने इस मुद्दे को हल करने के लिए पहले ही इस तरह से सोचा था, लेकिन मैं इसे पूरी तरह से स्वचालित बनाना चाहता था जहां इस समाधान को एसएलएन फ़ाइल में मैन्युअल परिवर्तन की आवश्यकता होती है। –

+0

क्या आपके पास पहले से कोई दूसरा समाधान है? –

0

3 साल देर से (कमांड अद्यतन पैकेज पैकेज प्रबंधक कंसोल विंडो में -reinstall। भागो), लेकिन यह दूसरों की मदद कर सकते हैं।

1) अपने जादूगर कक्षा में एक DTE क्षेत्र ऐलान करते हैं और इस क्षेत्र में RunStarted (करने के लिए automationObject पैरामीटर ...) को बचाने:

public class MyWizard : IWizard 
{ 
    DTE dte; 
    ... 


    public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) 
    { 
     dte = automationObject as DTE; 

     ... 

2) RunFinished में, को बचाने के लिए DTE ऑब्जेक्ट का उपयोग समाधान भी आप चाहते हैं:

public void RunFinished() 
    { 
     if(dte != null) 
     { 
      var solution = dte.Solution; 
      var path = <whatever path you want>; 
      solution.SaveAs(path); 
     } 
     ... 

आप RunStarted पर replacementsDictionary की सामग्री का निरीक्षण किया और वहाँ में से एक मान का उपयोग करना चाहते हो सकता है; उदाहरण के लिए, आप समाधान फ़ाइल के पथ का निर्माण करने के लिए $ destinationdirectory $ प्रविष्टि का उपयोग कर सकते हैं (मैं उस का उपयोग कर रहा हूं)।

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