2012-10-18 20 views
8

मैं वर्तमान में सभी फीचर ग्रिड को फ़ाइल में लाने के लिए अपनी सभी परियोजनाओं (शेयरपॉइंट) पर फिर से प्रयास करने की कोशिश कर रहा हूं। वहां मैं परियोजनाओं के नाम से उन्हें उपसर्ग करना चाहता हूं। मेरी समस्या डीटीई है। सॉल्यूशन.इटम और डीटीई। सॉल्यूशन.प्रोजेक्ट्स इटिम (या फोरैच के लिए एन्युमरेटर्स) एक पूर्णांक नहीं लेते हैं क्योंकि पैरामीटर और फोरैच एक ऑब्जेक्ट देता है जो प्रोजेक्ट में जा सकता है। कोड ठीक है - - डिबगर नहीं हैसी # टी 4 टेम्पलेट में डीटीई के माध्यम से परियोजनाओं तक पहुंच

var hostServiceProvider = (IServiceProvider) Host; 
var dte = (DTE) hostServiceProvider.GetService(typeof(DTE)); 
var projectCount = dte.Solution.Projects.Count; 

var projects = new Dictionary<string, string>(); 

foreach(Project dteProject in dte.Solution) 
{ 
    var dteProject = dte.Solution.Item(i); 
    projects.Add(dteProject.Name, dteProject.FullName); 
} 

ठीक है:

यहाँ मेरी कोड स्निपेट है! मेरी अपवाद जहां डीबग संदर्भ में फेंक दिया गया है, लेकिन अगर डिबगर संलग्न नहीं है, तो टेम्पलेट ठीक चला जाएगा।

+0

मैं इस सटीक एक ही समस्या देख रहा हूँ की कोशिश करो, और सिर्फ यह आज सुबह (सवाल पर अच्छा समय) का सामना करना पड़ा। मेरे मामले में यह Project.ProjectItems को पुन: सक्रिय करते समय एक अवैधCastException फेंक रहा है। जैसा कि नीचे वर्णित है, यह केवल टेम्पलेट को डिबग करते समय फेंकता है। – daveaglick

उत्तर

12

Solution.Projects संपत्ति का प्रयास करें:

<#@ template language="C#" debug="true" hostspecific="true" #> 
<#@ assembly name="Microsoft.VisualStudio.Shell.Interop.8.0" #> 
<#@ assembly name="EnvDTE" #> 
<#@ assembly name="EnvDTE80" #> 
<#@ assembly name="VSLangProj" #> 
<#@ import namespace="Microsoft.VisualStudio.Shell.Interop" #> 
<#@ import namespace="EnvDTE" #> 
<#@ import namespace="EnvDTE80" #> 
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #> 
<#@ output extension=".txt" #> 
<# 

var hostServiceProvider = (IServiceProvider)this.Host; 
var dte = (DTE)hostServiceProvider.GetService(typeof(DTE)); 

foreach (Project project in dte.Solution) 
{ 
    #> 
    <#= project.Name #> 
    <# 
} 

#> 
+0

@ Grumbler85: मेरा उत्तर अपडेट किया गया। उपरोक्त कोड एक टी 4 टेम्पलेट है जो मेरे विजुअल स्टूडियो 2010 पर सफलतापूर्वक चलता है। – Steven

+0

ठीक है - मुझे अब समस्या दिखाई दे रही है - मैंने थोड़ी देर से अपने टी 4 को डीबग करने का प्रयास किया - लेकिन मैंने आपका डीबग नहीं किया, लेकिन जब मैंने किया, तो तुम्हारा था असफल भी तो ऐसा लगता है कि टी 4-डीबगिंग सबसे अच्छा नहीं है। – TGlatzer

+0

क्या मैं आप दोनों को जवाब के रूप में चिह्नित कर सकता हूं? – TGlatzer

2

इस

 var item = dte.Solution.Projects.GetEnumerator(); 
     while (item.MoveNext()) 
     { 
      var project = item.Current as EnvDTE.Project; 
      if (project == null) 
      { 
       continue; 
      } 
      ... 
     } 
+0

ठीक है, इसने T4VSHostProcess को क्रैश किया .... – TGlatzer

+0

@ Grumbler85 उत्सुक। मैं इसे नियमित रूप से किसी भी दुष्प्रभाव के साथ उपयोग नहीं करता हूं। – podiluska

+0

शायद वीएस2012 के साथ कोई समस्या है? – TGlatzer