2012-10-30 32 views
9

मेरे पास एक टी 4 टेम्पलेट है जो मेरी परियोजना में कई .tt फ़ाइलों को संसाधित करता है। मेरे पास कुछ कस्टम वर्ग भी हैं जिन्हें मैंने कोड परिवर्तन प्रक्रिया में मदद करने के लिए परिभाषित किया है।टी 4 कोड पीढ़ी, कस्टम असेंबली संदर्भ

<#@ template language="C#" hostspecific="True" debug="True" #> 
<#@ output extension="cs" #> 
<#@ assembly name="System.Core.dll" #> 
<#@ assembly name="$(TargetDir)\MyDependency.dll" #> 

यह विजुअल स्टूडियो में काम करता है, मेरे पास एक वीएस मैक्रो है जो $ (TargetDir) को सही तरीके से परिभाषित करता है।

अब, मैं अपनी निर्माण प्रक्रिया के दौरान कोड जनरेशन प्रक्रिया करना चाहता हूं। मैं कहा:

<TransformOnBuild>true</TransformOnBuild> 
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles> 
<IncludeDslT4Settings>true</IncludeDslT4Settings> <ItemGroup> 
<T4ReferencePath Include="$(OutputPath)" /> 
</ItemGroup> 
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" /> 

मेरे निर्माण चलाता है, लेकिन मैं मिलता है:

सी: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ TextTemplating \ v10.0 \ Microsoft.TextTemplating। लक्ष्य (407): असेंबली संदर्भ '$ (TargetDir) \ MyDependency.dll' को हल करने का प्रयास करते समय मेजबान ने अपवाद फेंक दिया। परिवर्तन नहीं चलाया जाएगा। निम्नलिखित अपवाद फेंक दिया गया था: System.IO.FileLoadException: दिया गया असेंबली नाम या कोडबेस अमान्य था। Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocation पर System.Reflection.AssemblyName.nInit() पर System.Reflection.AssemblyName.nInit (RuntimeAssembly & विधानसभा, बूलियन forIntrospection, बूलियन raiseResolveEvent) पर: (0x80131047 HRESULT से अपवाद) (स्ट्रिंग strongName) Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.ResolveAssemblyReference पर (स्ट्रिंग assemblyReference) Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences पर (ITextTemplatingEngineHost मेजबान, TemplateProcessingSession सत्र)। रेखा = -1, कॉलम = -1

स्पष्ट रूप से यह टीम निर्माण संदर्भ में $(TargetDir) को हल नहीं करेगा।

मैंने अपने निर्माण कॉन्फ़िगरेशन के प्रॉपर्टी ग्रुप में लक्ष्यडियर जोड़ने का प्रयास नहीं किया, इसका कोई फायदा नहीं हुआ। यह मान टी 4 कोड जनरेटर के संदर्भ में गुजरता नहीं है।

मैं पर्यावरण चर का उपयोग नहीं करना चाहता।

मैं टीम बिल्ड संदर्भ में $(TargetDir) सही तरीके से कैसे सेट कर सकता हूं?

+0

ओलेग Sych में MSBuild एकीकरण के बारे में लिखा है: http: //www.olegsych।कॉम/2010/04/समझ-टी 4-एमएसबिल्ड-एकीकरण/# शामिल फ़ोल्डर्स। मैं यह नहीं बता सकता कि यह आपकी समस्या का समाधान करता है लेकिन यह विषय पर एक बहुत अच्छी गाइड प्रतीत होता है। – FuleSnabel

+0

हाँ, कोई पासा नहीं .. –

उत्तर

4

मुझे नहीं लगता कि दृश्य स्टूडियो द्वारा $ (आउटपुटपैथ) को परिभाषित किया गया है। क्या आपने अपनी परियोजना में अपने आइटम में $ (TargetDir) का प्रयास किया है? फिर आप टी 4 फाइल में अपनी असेंबली घोषणा से $ (TargetDir) \ को हटा सकते हैं।

मैंने अभी काम करने के समान कुछ पाने के लिए कई संभावनाओं के माध्यम से काम किया है, आज या कल ब्लॉग पोस्ट कर रहे हैं।

तो:

<ItemGroup> 
    <T4ReferencePath Include="$(TargetDir)" /> 
</ItemGroup> 
अपने csproj में

, और

<#@ assembly name="MyDependency.dll" #> 

अपने टी -4 फ़ाइल

+0

यहां वादा किया गया ब्लॉग पोस्ट है। विलंब के लिए खेद है! http://netitude.bc3tech.net/2013/06/15/t4-gotchyas-in-your-environment/ – bc3tech

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

  • कोई संबंधित समस्या नहीं^_^