2011-05-27 17 views
9

मेरे पास एक कस्टम डीएल है, जिसमें इसमें एक वर्ग है, और (सादगी के लिए) पर एक विधि है जो एक स्ट्रिंग वापस कर देगी।टी 4 टेम्पलेट असेंबली निर्देश

मेरे पास एक प्रोजेक्ट है, जो संदर्भ डीएलएल ने कहा था, और मैं उस परियोजना में एक (प्रीप्रोसेस्ड) टी 4 टेम्पलेट का उपयोग नहीं करना चाहता, जिसने विधि कहा। मैं इस की कोशिश की है:

<#@ template debug="true" hostspecific="false" language="C#" #> 
<#@ assembly name="MyDLL.dll" #> 
<#@ output extension=".cs" #> 
<# 
    var template = new MyDLL.MyNamespace.MyClass(); 
     this.Write(template.Run()); 
#> 

मैं गया निम्न त्रुटियों:

त्रुटि 14 संकलन परिवर्तन: मेटाडाटा फ़ाइल 'MyDLL.dll' नहीं पाया जा सका
त्रुटि 13 एक नेमस्पेस में सीधे फ़ील्ड या विधियों जैसे

भी हो सकता है, भले ही MyClass.Run() बसहै

त्रुटि परिवर्तन संकलन: मेटाडाटा फ़ाइल 'dotless.Core'

यह अनुकूलता को तोड़ने की वजह से यहाँ वर्णित है नहीं पाया जा सका:

+0

टी 4 और यह असेंबली संदर्भ कैसे पाता है, इस संस्करण पर निर्भर करता है कि आप किस संस्करण पर हैं और आप उन्हें कैसे चला रहे हैं। क्या आप विजुअल स्टूडियो 2008 या 2010 का उपयोग कर रहे हैं? क्या आप उन्हें विजुअल स्टूडियो, या TextTransform.exe से चला रहे हैं? – CodingWithSpike

उत्तर

8

मुझे कल ही एक ही समस्या थी, हमारे पास समाधान स्तर बाइनरीज़ एफ है पुराना, तो निम्नलिखित ने मेरे लिए $(SolutionDir)Binaries\Assembly.dll काम किया।

हालांकि, जहां विधानसभा स्थित है पर निर्भर करता है, तो आप ... $(ProjectDir) निर्देश का उपयोग करके एक परियोजना रिश्तेदार पथ का उपयोग करने में सक्षम हो सकता

0

(नोट:। यह सब VS2013 पर लागू होता है के साथ अलग हो सकता है अन्य संस्करण।)

सबसे पहले, अपने आउटपुट पथ में फ़ाइल को खोजने के लिए $(TargetDir) का उपयोग करें।

पूर्व: <#@ assembly name="$(TargetDir)MyDLL.dll" #>

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

और वास्तव में यह कभी भी तब तक नहीं होगा जब तक आप सफलतापूर्वक निर्माण नहीं करते हैं, और यदि आपको टेम्पलेट जेनरेटर से कोई त्रुटि मिल रही है कि संदर्भ नहीं मिल सकता है, तो आप कभी भी सफलतापूर्वक निर्माण नहीं करेंगे, और आप अटक गया

इस स्थिति से बाहर निकलने का तरीका अस्थायी रूप से टेम्पलेट को बाहर निकालना है, अपनी परियोजना को बनाने के लिए, (संदर्भों की प्रतिलिपि बनायेगा) प्राप्त करें, और फिर इसे वापस जोड़ें; या अन्यथा मैन्युअल रूप से उस निर्देशिका में .dlls को कॉपी करें जिसके बारे में शिकायत हो रही है। एक बार चीजें बनने के बाद, उन्हें इमारत में रहना चाहिए।

(चूंकि संदर्भों से पहले टेम्पलेट जनरेटर चलाता है, इसलिए मुझे संदेह है कि नया कोड शामिल एक समान समस्या होगी।यदि आप लाइब्रेरी में नया कोड जोड़ते हैं, और बिल्डिंग से पहले अपने टेम्पलेट में इसका उपयोग करते हैं, तो आप टेम्पलेट के साथ अटक जाएंगे जो नए कोड से अवगत नहीं है, जिससे यह एक त्रुटि फेंकता है, जिससे आपका निर्माण सफल नहीं होता है, इसलिए यह नया संस्करण नहीं मिलता है, और आप फिर से अटक गए हैं।)

(जब भी आप अपनी परियोजना को साफ या पुनर्निर्माण करते हैं तो आपको भी इस स्थिति में समाप्त होना चाहिए, लेकिन ऐसा लगता है कि ऐसा अक्सर होता है , इसलिए मुझे एहसास होने के अलावा और भी कुछ हो सकता है।)

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