2011-02-10 14 views
16

मैं विजुअल स्टूडियो 2010 में टी 4 का उपयोग कर रहा हूं, और मैं अपने समाधान में फ़ाइलों पर पुन: प्रयास करना चाहता हूं, हालांकि मुझे पता चला है कि टी 4 स्रोत पीढ़ी एक प्रकार के सैंडबॉक्स में काम करती है, और वर्तमान कार्य निर्देशिका प्रोग्राम फ़ाइलों में विजुअल स्टूडियो 10 निर्देशिका के अंदर है।टी 4 समाधान की वर्तमान कार्य निर्देशिका

क्या T4 फ़ाइल संबंधित रूप से समाधान के संदर्भ में कोई तरीका है, ताकि यह निर्माण को तोड़ने न दे, या किसी और के बॉक्स पर काम न करे जिसमें समान फ़ाइल संरचना आदि न हो?

धन्यवाद

उत्तर

26

तुम इतनी तरह सच करने के लिए hostspecific विशेषता सेट करना होगा:

<#@ template language="C#" hostspecific="True" #> 

ITextTemplatingEngineHost इंटरफ़ेस आपको जानकारी की आवश्यकता दे देंगे।

<#= this.Host.ResolveParameterValue("-", "-", "projects") #> 

मैं नहीं मानता कि वहाँ समाधान को संदर्भित करने के लिए एक रास्ता है, लेकिन आप पथ, जिसमें आपके *.tt फ़ाइल है और वहाँ से अन्य फ़ाइलें प्राप्त कर सकते हैं।

पाठ टेम्पलेट के लिए कोई स्थान रिश्तेदार से एक फ़ाइल को लोड करने के लिए, आप इस का उपयोग कर सकते हैं:

public string GetSolutionDirectory() 
{ 
    var serviceProvider = this.Host as IServiceProvider; 
    var dte = serviceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE; 
    return System.IO.Path.GetDirectoryName(dte.Solution.FullName); 
} 
+2

धन्यवाद शिव! मैं इसका उपयोग कर समाप्त हो गया। होस्ट। टेम्पलेटफाइल, जो सीधे टेम्पलेट को इंगित करता है और वहां से भाग गया। – aceinthehole

+0

@aceinthehole, प्रतिक्रिया के लिए धन्यवाद! –

+2

आप डीटीई लोड करके सीधे समाधान प्राप्त कर सकते हैं: http://stackoverflow.com/questions/12952110/accessing-projects-via-dte-in-c-sharp-t4-template –

9

इस विधि मैं समाधान आधार निर्देशिका पाने के लिए इस्तेमाल करते हैं एक टी 4 टेम्पलेट में प्रदान किए गए तर्क जेकेलिको का उपयोग कैसे करें जो एक XML फ़ाइल बनाता है:

<#@ template debug="false" hostspecific="true" language="C#" #><# /* hostspecific must be set to "true" in order to access Visual Studio project properties. */ #> 
<#@ assembly name="System.Core" #> 
<#@ import namespace="System.Text" #> 
<#@ output extension=".xml" #> 
<#@ assembly name="EnvDTE" #><# /* This assembly provides access to Visual Studio project properties. */ #> 
<# 
    var serviceProvider = this.Host as IServiceProvider; 
    var dte = serviceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE; 
    var solutionDirectory = System.IO.Path.GetDirectoryName(dte.Solution.FullName); 
#> 
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <mySetting filePath="<#= solutionDirectory #>\MySubfolder\MyFile.exe" /> 
</configuration> 

एक्सएमएल एट ribute "filePath" विजुअल स्टूडियो की समाधान निर्देशिका प्लस "\ MySubfolder \ MyFile.exe" के बराबर होगा।

4

यहाँ:

this.Host.ResolvePath("relative/path.txt") 
संबंधित मुद्दे