2016-07-13 12 views
7

मैं एक विजुअल स्टूडियो 2015 प्रोजेक्ट बनाने के लिए एक टीएफएस बिल्ड प्रोजेक्ट का उपयोग कर रहा हूं जिसमें एसएएसएस को अन्य चीजों के साथ संकलित करने के लिए एक गिल्फ़ाइल शामिल है। मैं एमएसबिल्ड टास्क और टास्क रनर बाइंडिंग का उपयोग करके घटनाओं के अनुक्रम को समझने की कोशिश कर रहा हूं। ऐसा लगता है कि MSBuild का पता लगाने और मेरा डिफ़ॉल्ट घूंट कार्य BeforeBuild चलाने के लिए पर्याप्त जानता है:घटनाक्रम का आदेश - एमएसबिल्ड और टास्क रनर बाइंडिंग्स (गुलप)

/// <binding BeforeBuild='default' /> 
var gulp = require('gulp'); 
var sass = require('gulp-sass'); 
var importer = require('sass-importer-npm'); 

gulp.task('sass', function() { 
    return gulp.src([ 
    './sass/**/*.scss', 
    './node_modules/font-awesome/scss/**/*.scss' 
    ]) 
    .pipe(sass({ importer: importer }).on('error', sass.logError)) 
    .pipe(gulp.dest('./Content/css')); 
}); 

मैं BeforeBuild लक्ष्य के बाद चलाने के लिए इतना है कि मैं प्रकाशित करने के लिए इस परियोजना में उत्पन्न फ़ाइलों शामिल कर सकते हैं एक MSBuild लक्ष्य का उपयोग करने के लिए कर रहा हूँ:

<Target Name="CopyGulpFiles" AfterTargets="BeforeBuild"> 

यहाँ अपने निर्माण में मेरी MSBuild कॉल .proj प्रासंगिक जानकारी के साथ फ़ाइल है:

<ItemGroup> 
    <ProjectsToBuild Include="$(MSBuildThisFileDirectory)..\MyProject.sln"> 
     <AdditionalProperties> 
     VisualStudioVersion=$(VisualStudioVersion); 
     OutputPath=$(OutputRoot); 
     WebPublishMethod=FileSystem; 
     publishUrl=$(StageFolder); 
     DeployOnBuild=false; 
     DeployTarget=WebPublish; 
     PublishProfile=$(MSBuildThisFileFullPath) 
     </AdditionalProperties> 
    </ProjectsToBuild> 
    </ItemGroup> 

<MSBuild Projects="@(ProjectsToBuild)" Properties="Configuration=Dev"/> 

इन दो चीजों को सही क्रम everyti में चलाने के लिए लग रहे हैं मैं उन्हें चलाता हूँ। इससे कुछ प्रश्न उठाए गए हैं:

  • क्या टास्क रनर के लिए 'प्रीबिल्ड' बाध्यकारी एमएसबिल्ड में 'पहले बिल्ड' लक्ष्य से पहले निष्पादित किया जाएगा?
  • बाइंडिंग/लक्ष्य निर्धारित करने का क्रम यहां निर्धारित है?
  • क्या आफ्टरटेक्शंस प्रॉपर्टी का उपयोग करना सुनिश्चित करता है कि यह पूरे 'प्रीबिल्ड' चरण (लक्ष्य और बाइंडिंग) पूरा होने के बाद चलाया जाता है?
  • MSBuild कैसे जानता है कि मेरी Gulp फ़ाइल का उपयोग कैसे करें? मुझे लगता है कि दृश्य स्टूडियो उपयोग के रूप में यह एक ही तंत्र होना चाहिए।

उत्तर

1

मैं इस मुद्दे पर भाग गया जहां टास्क रनर के साथ निर्माण करते समय सबकुछ स्थानीय रूप से काम करता था, लेकिन गुलप को एमएसबिल्ड द्वारा कभी नहीं बुलाया गया था।

मैं निम्नलिखित समाधान के साथ समाप्त हुआ, जो हमारे कस्टम लक्ष्य GulpBuild के साथ Compile कार्य को बढ़ाता है। इस स्निपेट में build मेरे गुलप कार्य का नाम है।

<PropertyGroup> 
    <CompileDependsOn> 
     $(CompileDependsOn); 
     GulpBuild; 
    </CompileDependsOn> 
</PropertyGroup> 
<Target Name="GulpBuild"> 
    <Exec Command="npm install" /> 
    <Exec Command="gulp build" /> 
</Target> 

Steve Cadwallader's post was very helpful in solving this issue.

  • BeforeBuild लक्ष्य हमेशा MSBuild में BeforeBuild से पहले चलाने चाहिए। टास्क रनर विजुअल स्टूडियो के लिए विशिष्ट है, इसलिए यह केवल तब होगा जब विजुअल स्टूडियो में बिल्डिंग हो।
  • This will help with your questions about ordering.
संबंधित मुद्दे