2010-11-24 15 views
8

विजुअल स्टूडियो में, आप एक प्रोजेक्ट को अनलोड कर सकते हैं, और जब आप समाधान (राइट-क्लिक/बिल्ड) बनाते हैं, तो अनलोडेड प्रोजेक्ट नहीं बनाया जाता है। हालांकि, जब आप कमांड लाइन से MSBuild चलाते हैं, तो इस तरह;एमएसबिल्ड चलाएं, अनलोडेड परियोजनाओं का सम्मान करें

C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe 
    "$slnFile" /t:build /p:Configuration=Debug /verbosity:minimal 

परियोजना बनाया गया है। क्या एमएसबिल्ड को विजुअल स्टूडियो में अनलोड किए गए परियोजनाओं का सम्मान करने का कोई तरीका है?

स्थिति यह है कि हमारे पास कई परियोजनाओं का समाधान है। उनमें से एक को बनाने के लिए विशेष सॉफ्टवेयर की आवश्यकता होती है, और यह हमारी बिल्ड मशीन पर मौजूद है लेकिन सभी डेवलपर मशीनों पर नहीं। इसका मतलब है कि मैं सीधे कमांड लाइन निर्माण नहीं कर सकता या जब यह दुष्ट परियोजना का सामना करता है तो यह विफल रहता है।

कोई विचार?

[संपादित करें: एमएसबिल्ड ऐसा करने में सक्षम होना चाहिए, क्योंकि विजुअल स्टूडियो बिल्डिंग करने के लिए एमएसबिल्ड का उपयोग करता है। वीएस क्या करता है कि कमांड लाइन नहीं करता है?]

+0

जब विजुअल स्टूडियो बनाता है, तो संभवतः यह समाधान फ़ाइल के बजाय एमएसबिल्ड को संकलित करने के लिए परियोजनाओं को स्पष्ट रूप से पास करता है। इस तरह यह परियोजनाओं पर छोड़ सकता है। मेरा उत्तर एक वैकल्पिक विधि का विवरण देता है जो आप चाहते हैं जो करेंगे। – adrianbanks

उत्तर

6

एमएसबिल्ड किसी समाधान के भीतर परियोजना को लोड किए गए राज्य के बारे में कुछ भी नहीं जानता है, तो आप जो करने की कोशिश कर रहे हैं वह संभव नहीं है।

एक विकल्प के रूप में, आप नामक एक नई बिल्ड कॉन्फ़िगरेशन को परिभाषित कर सकते हैं जिसे BUILD_MACHINE (Build -> Configuration Manager मेनू का उपयोग करके)। इस बिल्ड कॉन्फ़िगरेशन में, अपनी सभी परियोजनाओं को बनाने के लिए सक्षम करें। यह तब कॉन्फ़िगरेशन है जिसे आप बनाने के लिए मशीन बनाते हैं। यदि आप डीबग और रिलीज कॉन्फ़िगरेशन (उसी मेनू विकल्प का उपयोग करके) बनाने से विशिष्ट प्रोजेक्ट को अक्षम करते हैं, तो आप उस प्रोजेक्ट को अनलोड किए बिना अपनी डेवलपमेंट मशीन पर इन कॉन्फ़िगरेशन का निर्माण कर सकते हैं, जिसे आप बनाना नहीं चाहते हैं।

एमएसबिल्ड सम्मान कॉन्फ़िगरेशन का निर्माण करते हैं, ताकि आप विजुअल स्टूडियो या एमएसबिल्ड का उपयोग करके अपनी गैर-निर्माण मशीन बिल्ड कॉन्फ़िगरेशन (उदाहरण के लिए डीबग, रिलीज) का निर्माण कर सकें और परेशानी वाली परियोजना नहीं बनाई जाएगी।

1

इस बारे में जानकारी कि कोई प्रोजेक्ट अनलोड हो गया है या नहीं, एसएलएन फ़ाइल में नहीं जाता है, लेकिन xxx.user फ़ाइल में। इसलिए, एमएसबिल्ड को इसके बारे में पता नहीं है।

<!--build selection of projects--> 
<Project 
    ToolsVersion="3.5" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <ItemGroup> 
    <DevMachine Include="A\b.vcproj"/> 
    <DevMachine Include="B\b.vcproj"/> 
    <DevMachine Include="C\c.vcproj"/> 
    </ItemGroup> 

    <ItemGroup> 
    <BuildMachine Include="D\d.vcproj"/> 
    <BuildMachine Include="E\e.vcproj"/> 
    </ItemGroup> 

    <Target Name="All"> 
    <CallTarget Targets="MakeDevMachine"/> 
    <CallTarget Targets="MakeBuildMachine"/> 
    </Target> 

    <Target Name="MakeDevMachine"> 
    <VCBuild 
     Projects="@(DevMachine)" 
    /> 
    </Target> 

    <Target Name="MakeBuildMachine"> 
    <VCBuild 
     Projects="@(BuildMachine)" 
    /> 
    </Target> 

</Project> 

केवल वापसी आप अपने समाधान फ़ाइल के साथ सिंक में रखने के लिए है:

आपका सबसे अच्छा शर्त केवल उन परियोजनाओं है कि हर जगह बनाया जा सकता है, उदाहरण के लिए युक्त एक सरल MSBuild फ़ाइल बनाने के लिए है।

1

एमएसबिल्ड के बजाय devenv /build ConfigurationName file.sln का उपयोग करने का एक संभावित समाधान है।

हालांकि, आपके समाधान में, प्रोजेक्ट को अनलोड करने से प्रारंभ करने का सही समाधान नहीं है। जैसा कि मेरे सामने लोगों ने कहा है, बिल्ड मशीन के लिए एक अलग विन्यास का उपयोग करें।

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