2012-08-30 20 views
5

मैंने कई संस्करणों पर अपनी परियोजना बनाने के लिए एक छोटी एमएसबिल्ड लिपि लिखी। जब मैं इसे वीएस2012 कमांड प्रॉम्प्ट से चलाता हूं तो यह काम करता है, मुझे कोई त्रुटि या अपवाद नहीं मिलता है। हालांकि जब मैं उत्पादित असेंबली की तुलना करता हूं, तो वे समान होते हैं। क्या मेरी लिपि में कुछ गड़बड़ है?क्या मेरी बिल्ड स्क्रिप्ट सही ढंग से काम कर रहे कई लक्ष्य ढांचे को लक्षित करने के लिए है?

<Target Name="Build"> 

    <MSBuild Projects=".\WcfClientBase\WcfClientBase.csproj" 
      Properties="Configuration=Release;OutputPath=.\BuildArtifacts\net45;TargetFrameworkVersion=v4.5" /> 

    <MSBuild Projects=".\WcfClientBase\WcfClientBase.csproj" 
      Properties="Configuration=Release;OutputPath=.\BuildArtifacts\net40;TargetFrameworkVersion=v4.0" /> 

    <MSBuild Projects=".\WcfClientBase\WcfClientBase.csproj" 
      Properties="Configuration=Release;OutputPath=.\BuildArtifacts\net35;TargetFrameworkVersion=v3.5" /> 

</Target> 

मेरे पास वीएस2012 पेशेवर स्थापित है। मैंने यह भी देखा कि .NET 4.5 का अपना MSBuild.exe नहीं है। क्या यह संस्करण 4.0 से एक का उपयोग कर रहा है?

अद्यतन

मैं प्रत्येक संस्करण के लिए दृश्य स्टूडियो के साथ बनाया गया है और सभी विधानसभाओं अलग हैं। मेरी लिपि में कुछ गड़बड़ है। मैंने जानबूझकर लक्ष्यफ्रेमवर्क वर्जन पैरामीटर नाम को गलत टाइप किया लेकिन यह अभी भी उसी आउटपुट का निर्माण और उत्पादन करता है। हो सकता है कि यह प्रोजेक्ट फ़ाइल से उस पैरामीटर को ओवरराइड करने में असमर्थ है या ऐसे अन्य पैरामीटर हैं जिन्हें मैं याद कर रहा हूं। कोई और विचार?

+0

मैं सिर्फ ILMerge का उपयोग .NET 4 के लिए एक .NET 2 निष्पादन को बदलने के लिए, पी याद रखें, प्रवेश बिंदु क्रम संस्करण तय। मेरे मामले में सभी असेंबली .NET 2 को लक्षित कर रहे हैं और AnyCPU का उपयोग कर रहे हैं। फिर मैं आईएलएमर्ज और कोरफ्लैग का उपयोग करता हूं ताकि .NET संस्करण और गठबंधन संयोजनों के लिए 4 निष्पादन योग्यों का एक सेट उत्पन्न हो सके। एक आकर्षण काम करता है (मेरे मामले में विशेष रूप से सभी 4 कॉन्फ़िगरेशन पर ngen का उपयोग करने के लिए)। – leppie

+0

आप अपनी तुलना कैसे कर रहे हैं? क्या आप बाइट-फॉर-बाइट की तुलना कर रहे हैं? –

+0

@splatteredbits हां –

उत्तर

4

आपको इंटरमीडिएटऑटपुटपाथ संपत्ति को कस्टमाइज़ करने की भी आवश्यकता है, अन्यथा सभी 3 स्वाद एक ही इंटरमीडिएट निर्देशिका obj\Release साझा करते हैं। इस प्रयास करें:

<Target Name="Build"> 
    <MSBuild Projects="WcfClientBase\WcfClientBase.csproj" 
     Properties="Configuration=Release;OutputPath=BuildArtifacts\net45\;IntermediateOutputPath=obj\Release\net45\;TargetFrameworkVersion=v4.5" /> 
    <MSBuild Projects="WcfClientBase\WcfClientBase.csproj" 
     Properties="Configuration=Release;OutputPath=BuildArtifacts\net40\;IntermediateOutputPath=obj\Release\net40\;TargetFrameworkVersion=v4.0" /> 
    <MSBuild Projects="WcfClientBase\WcfClientBase.csproj" 
     Properties="Configuration=Release;OutputPath=BuildArtifacts\net35\;IntermediateOutputPath=obj\Release\net35\;TargetFrameworkVersion=v3.5" /> 
</Target> 
+0

मदद नहीं की। असेंबली अभी भी समान हैं। –

+1

@Ufuk, 4.0 के साथ 3.5 बाइनरी की तुलना करें। वे अलग होंगे। तुलना करने का एक तरीका 'ildasm' में बाइनरी खोलना है और जांचें कि mscorlib का कौन सा संस्करण असेंबली मेटाडेटा में जुड़ा हुआ है। –

+0

कृपया मेरे अपडेट की जांच करें। –