2011-04-14 8 views
5

वृद्धिशील बिल्ड समय सुधार का पीछा करते हुए, मैंने पाया कि .btproj फ़ाइलें और इस प्रकार उन सभी अन्य परियोजनाओं पर निर्भर करता है जो प्रत्येक वृद्धिशील निर्माण पर पुनर्निर्मित (आंशिक रूप से) होते हैं। BizTalkCommon.targets को इस तरह से ट्रैक करना, मैंने पाया कि यह असेंबली का 2 पास संकलन करता है - लेकिन केवल पहला पास पहले ही निर्मित कलाकृतियों का सम्मान करता है, इस प्रकार निर्भरता श्रृंखला के बढ़ते हिस्से को तोड़ देता है। हमलावर लक्ष्य BizTalkCommon.targets (लाइन 228) में देखा जा सकता है:बिज़टॉक 200 9 और 2010 में वृद्धिशील निर्माण समर्थन। बीटीप्रोजे परियोजनाएं?

<!-- Delete the assembly and rerun the build process --> 
<Target Name="SecondPass" 
     Condition="$(SecondBuild)!=true and $(TempAssemblyOnly)!=true"> 

    <Delete Files="@(IntermediateAssembly)" /> 
    <MSBuild Projects="$(MSBuildProjectFile)" Properties="SecondBuild=true"/> 
</Target> 

मुझे पता है वहाँ 2 पास निर्माण के लिए एक कारण है कि, लेकिन बस विश्वास नहीं कर सकता कि यह उपयुक्त in- निर्दिष्ट करने के लिए संभव नहीं होगा और वृद्धिशील कार्यों को सही तरीके से संभालने के लिए लक्ष्य के लिए आउटपुट।

क्या किसी को पता है कि .targets फ़ाइल के लिए पैच है या यदि कोई और अच्छा कारण है कि वृद्धिशील बिल्ड समर्थित नहीं हैं?

उत्तर

3

आप एमएसबिल्ड बिज़टॉक परियोजना के कुछ बहुत ही सरल परिवर्तनों के साथ वृद्धिशील संकलन को सक्षम कर सकते हैं। असल में, आपको BizTalkCommon.targets फ़ाइल में परिभाषित दो लक्ष्यों को ओवरराइड करने की आवश्यकता है।

उन लक्ष्यों को अपने स्वयं के .bproproj फ़ाइलों में ओवरराइड किया जा सकता है और मूल .targets फ़ाइल को संशोधित करने की आवश्यकता नहीं है जो BizTalk के साथ जहाज़ हैं।

कैसे

सबसे पहले अपने अनुकूलन, उदाहरण के BizTalkCustom.targets के लिए की मेजबानी के लिए आप .targets फ़ाइल के स्वामी हैं बनाने के लिए:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\BizTalk\BizTalkC.targets" /> 

<!-- Rerun the build process (second pass) --> 
<Target Name="SecondPass" Condition="$(SecondBuild)!=true and $(TempAssemblyOnly)!=true and @(XLang)!=''"> 
    <MSBuild Projects="$(MSBuildProjectFile)" Properties="SecondBuild=true" /> 
</Target> 

<!-- Compile XLang/s orchestration --> 
<Target 
    Name="CompileODX" 
    Condition="$(SecondBuild)==true" 
    Inputs="@(XLang);$(MSBuildAllProjects);$(ClrTypesAssembly)" 
    Outputs="$(BuildDone)"> 

    <!-- Delete previously generated C# files from XLang compilation --> 
    <Delete Files="@(IntermediateAssembly)" /> 
    <Delete Files="@(CSharpOutputFromXLang)" /> 

    <XLangTask XLangItems="@(XLang)" 
      ProjectReferences="@(ReferencePath)" 
      WarningLevel="$(WarningLevel)" 
      BpelCompliance="$(BpelCompliance)" 
      DefineConstants="$(DefineConstants)" 
      TreatWarningsAsErrors="$(TreatWarningsAsErrors)" 
      TempAssembly="$(ClrTypesAssembly)" 
      OutputDirectory="$(XLangOutputPath)"> 
    </XLangTask> 
</Target> 

फिर, अपने .btproj फ़ाइल में पिछले Import बयान बदल देते हैं:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <Import Project="$(MyCustomExtensions)\BizTalkCustom.targets" /> 

यह कैसे काम करता है

बिज़टॉक सर्वर परियोजनाओं को किसी भी तरह से दो पास में संकलित करने की आवश्यकता है। पहला पास स्कीमा, मानचित्र और पाइपलाइनों को संकलित करता है, जबकि दूसरा पास ऑर्केस्ट्रेशंस संकलित करता है।

आप देखेंगे कि अतिरेक लक्ष्य मूल के मुकाबले बहुत समान हैं, BizTalkCommon.targets file के अंदर परिभाषित हैं।

  1. पहला परिवर्तन SecondPass लक्ष्य को संशोधित करने और Condition विशेषता में एक अतिरिक्त परीक्षण जोड़ने शामिल है: वास्तव में, मैं दो सरल परिवर्तन किए। यह परीक्षण उपयोगी होता है यदि दूसरे प्रोजेक्ट में ऑर्केस्ट्रेशंस न हो तो दूसरा पास होने से रोकने के लिए उपयोगी है।

  2. दुर्भाग्यवश, यदि आपके प्रोजेक्ट में ऑर्केस्ट्रेशंस हैं, तो मूल SecondPass लक्ष्य इंटरमीडिएट असेंबली को हटा देता है और फिर ऑर्केस्ट्रेशंस को संकलित करने के लिए आगे बढ़ता है। हालांकि, CompileODX लक्ष्य को चलाने की आवश्यकता नहीं है यदि सभी फाइलें पहले से अद्यतित हैं।इसलिए, दूसरे परिवर्तन में SecondPass से कार्य CompiledODX लक्ष्य पर लक्षित करना शामिल है।

यह सब कुछ है।

+0

क्या आपने बिज़टॉक 2010 के साथ यह कोशिश की है? –

+0

बिज़टॉक सर्वर 2010 के साथ काम करता है। हालांकि, BizTalk Server 2010 R2 के साथ इसे आजमाने का मौका नहीं था। –

+0

इसे आजमाया, वास्तव में काम करता है। समय कम महत्वपूर्ण रूप से नीचे जाना। धन्यवाद! –

1

यह मेरी टीम कुछ समय पहले दौड़ चुकी है और बस बिल्ड फाइलों को अनुकूलित करने का समर्थन करती है और इसके बजाय here स्थित बिज़टॉक परिनियोजन ढांचे के साथ जाती है। बिज़टॉक वीएस स्तर से कई "मजाकिया" चीजें करता है, क्योंकि 200 9 का पहला संस्करण बिज़टॉक बाहरी निर्माण प्रक्रिया का उपयोग नहीं करता था। लेकिन मुझे यकीन नहीं है कि डिज़ाइनर परिप्रेक्ष्य से शायद दूसरी पास की आवश्यकता क्यों है।

+0

बिज़टॉक परिनियोजन ढांचा आशाजनक लग रहा है, लेकिन यह अभी भी वृद्धिशील बिल्डों के लिए निर्माण समय में वास्तव में मदद नहीं करता है, जहां तक ​​मैं देख सकता हूं? – RasmusKL

+1

यह विशेष रूप से आपकी समस्या का समाधान नहीं करता है, लेकिन कुछ हुक हैं जो आप संभवतः थोड़ा करीब लाने के लिए बढ़ा सकते हैं। बिज़टॉक बिल्ड एक प्रकार का ब्लैक बॉक्स है और बहुत ज्यादा गड़बड़ कर निश्चित रूप से मुद्दों में परिणाम देगा। –

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