2014-05-09 4 views
5

दोनों में गुणों का उपयोग करके मुझे एक टी 4 टेम्पलेट बनाने में परेशानी हो रही है जिसका उपयोग विजुअल स्टूडियो और एमएसबील्ड से अपेक्षाकृत सरल सी # कोड उत्पन्न करने के लिए किया जा सकता है। टेम्पलेट एक डीएलएल संदर्भित करता है, जो परियोजना के आउटपुट पथ में रहता है। इसके अलावा, यह एक साधारण सरल टेम्पलेट है जो डोमेन ऑब्जेक्ट्स के संग्रह के माध्यम से loops और उनमें से प्रत्येक के लिए एक परीक्षण विधि outputs।टी 4: विजुअल स्टूडियो और एमएसबिल्ड

MSDN suggests दोनों सेनाओं में गुण प्रयोग करने के लिए निम्नलिखित दृष्टिकोण:

<!-- Define a project property, myLibFolder: --> 
<PropertyGroup> 
    <myLibFolder>$(MSBuildProjectDirectory)\..\libs</myLibFolder> 
</PropertyGroup> 

<!-- Tell the MSBuild T4 task to make the property available: --> 
<ItemGroup> 
    <T4ParameterValues Include="myLibFolder"> 
     <Value>$(myLibFolder)</Value> 
    </T4ParameterValues> 
    </ItemGroup> 

दुर्भाग्य से, यह सिर्फ काम नहीं करता।

Compiling transformation: Metadata file '$(myLibFolder)Cmc.SpeedWays.Core.Testing.dll' could not be found 

किसी को भी इस समस्या को हल करने का प्रबंधन किया था या कम से कम एक स्वीकार्य समाधान का लगता है: जब MSBuild के माध्यम से क्रियान्वित करने, मैं निम्नलिखित त्रुटि मिलती है? हम वीएस2012 और एमएसबील्ड 4.0 का उपयोग कर रहे हैं।

उत्तर

1

मुझे एक ही समस्या थी और मुझे खेद है कि मुझे एक स्पष्ट फिक्स नहीं मिला। हालांकि समस्या दूर हो गई, यह संभव मुद्दों के संग्रह की तरह लगता है।

मुझे लगता है कि कुंजी इस प्रकार की संपत्ति घोषणा केवल तभी काम करती है जब आप एमएसबिल्ड के साथ समाधान/प्रोजेक्ट बनाते हैं, यदि आप विजुअल स्टूडियो का उपयोग करते हैं तो गुण शून्य हो जाएंगे। मुझे लगता है कि यह मेरे लिए भ्रम था। अंत में मैं अपने टेम्पलेट, में कॉल जहाँ मैं MSBuild संपत्ति घोषित करने की कोशिश के साथ समाप्त हो गया है, और अगर यह वी.एस. के रूप में विफल रहता है

var configName = Host.ResolveParameterValue("-", "-", "configuration"); 
if (String.IsNullOrEmpty(configName)==true) 
{ 
    WriteLine ("// Generated from Visual Studio"); 
    IServiceProvider serviceProvider = (IServiceProvider)this.Host; 
    DTE dte = serviceProvider.GetService(typeof(DTE)) as DTE; 
    configName = dte.Solution.SolutionBuild.ActiveConfiguration.Name ; 
} 

अन्य बात बाहर देखने के लिए स्ट्रिंग संयोजन के साथ अवैध तार बनाने जा रहा है के लिए, आसान एक शून्य

के साथ समाप्त करने के लिए
संबंधित मुद्दे