2011-06-01 14 views
7

मैं देखता हूं और मैं नहीं देखता हूं।मैं टी 4 टेक्स्ट टेम्पलेट में कस्टम लाइब्रेरी/प्रोजेक्ट का उपयोग कैसे करूं?

मेरे पास दो परियोजनाओं - प्रोजेक्ट ए (लाइब्रेरी) और प्रोजेक्ट बी के साथ एक समाधान है, जो मुख्य परियोजना है और इसमें टी 4 टेक्स्ट टेम्पलेट शामिल है।

<#@ import namespace="MyProjectA" #> 

फिर भी, वहाँ अभी भी एक त्रुटि है "संकलन परिवर्तन: -

मैं अब तक क्या किया है मैं ए मैं टेम्पलेट में ऐसी रेखा शामिल परियोजना के लिए मुख्य परियोजना में एक संदर्भ जोड़ा प्रकार या नामस्थान नाम 'MyProjectA' नहीं मिला (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?) "

प्रश्न: मैं टेक्स्ट टेम्पलेट से प्रोजेक्ट ए का संदर्भ कैसे दे सकता हूं?

कृपया ध्यान दें: मैं समाधान में एक परियोजना का संदर्भ देना चाहता हूं, डिस्क पर डीएलएल फ़ाइल नहीं।

उत्तर

4

आपको "असेंबली" निर्देश का उपयोग करके डीएलएल को संदर्भित करने की आवश्यकता है। उदाहरण के लिए:

<#@ assembly name=“System.Xml” #> 

आप अपने पथ से भी डीएलएस का संदर्भ दे सकते हैं। ओलेग सिच की टी 4 श्रृंखला को आप जो भी जानना चाहते हैं, उसके लिए देखें। "असेंबली" निर्देश के बारे में पृष्ठ यहां दिया गया है: http://www.olegsych.com/2008/02/t4-assembly-directive/

मुझे डर है कि टी 4 टेम्पलेट पूरी तरह से समाधान के बारे में अनजान है, हालांकि, समाधान में एक और परियोजना का संदर्भ देना अभी भी किया जाना चाहिए एक डीएलएल संदर्भ। आप इस तरह से "टेम्पलेट" निर्देश में HostSpecific विशेषता सेट करते हैं:

<#@ template language="C#" debug="false" hostspecific="true" #> 

तो आप कम से कम अन्य dll रिश्तेदार के लिए पथ बनाने के लिए सक्षम होना चाहिए, हालांकि मैं प्रयास नहीं किया है कि विशेष रूप से चाल अपने आप को। आप Host.TemplateFile प्रॉपर्टी का उपयोग करके वर्तमान टी 4 फ़ाइल का मार्ग प्राप्त कर सकते हैं। डीएल संदर्भ का निर्माण करने के लिए इसका उपयोग करने का प्रयास करें, जैसे:

<#@ assembly name=Path.GetDirectoryName(Host.TemplateFile) + “..\OtherProject\bin\Debug\ClassLibrary1.dll” #> 

मैं वादा नहीं कर सकता कि यह काम करेगा, लेकिन यह एक शॉट के लायक है।

+0

धन्यवाद, ब्लॉग मैं निष्कर्ष पर पहुंचा पर स्पष्टीकरण से असेंबली निर्देश संदर्भ के लिए बस वैकल्पिक है (उदाहरण के लिए आप केवल एक टेम्पलेट के लिए असेंबली शामिल कर सकते हैं), और मैंने सोचा कि संदर्भ टी 4 द्वारा देखे जाते हैं। – greenoldman

+1

'hostspecific 'और'Path.GetDirectoryName' को '$ (SolutionDir)' से बचा जा सकता है, [link] (http://msdn.microsoft देखें।com/en-us/पुस्तकालय/gg586946.aspx)। शर्मिंदा कोई क्लीनर समाधान नहीं है जो टेक्स्ट पीढ़ी पर संदर्भित प्रोजेक्ट को ऑटोबल्ड करेगा यदि यह बदल गया है। –

10

$(SolutionDir) संदर्भ बिन फ़ोल्डर में dll के माध्यम से परियोजना का उपयोग करते हुए मेल द्वारा

<#@ assembly name="$(SolutionDir)MyProject\bin\Applications.Models.dll" #> 

(ऊपर समाधान का उपयोग कर Path.GetDirectoryName नहीं था (केवल टी -4 के साथ जिस तरह से है कि यह कैसे विधानसभा नामों का समाधान करता है की वजह से) काम इतना सोचा कि मैं अपना अनुभव साझा करूंगा)

+0

यह मेरे लिए वीएस2013 में काम करता है। –

0

टी 4 टेम्पलेट से असेंबली का संदर्भ देने के लिए सभी विधियां यहां दी गई हैं: T4 Template error - Assembly Directive cannot locate referenced assembly in Visual Studio 2010 project। वे अभी भी वीएस के बाद के संस्करणों के लिए आवेदन करते हैं।

आप विधि @atreeonhill द्वारा दिए गए उपयोग करना चाहते हैं और आप तो कुछ अन्य मैक्रो मान का उपयोग करना चाहते सभी वी.एस. मैक्रो यहां दिए गए हैं, तो: Macros for Build Commands and Properties

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