ऐसा करने के लिए शायद कोई अंतर्निहित तरीका नहीं है (वीएस के किसी भी संस्करण द्वारा स्थापित एमएसबिल्ड फाइलों में से कोई भी परियोजनाओं का निर्माण नहीं करता है, और like this one के लिए फीचर अनुरोध हैं)। एक बहुत तेज़ समाधान एक एमएसबिल्ड फ़ाइल बनाना है जो संदर्भित प्रोजेक्ट को प्री-बिल्ड इवेंट के रूप में बनाता है और उस प्रोजेक्ट को प्रत्येक प्रोजेक्ट में शामिल करता है जो किसी अन्य प्रोजेक्ट का संदर्भ देता है। उदाहरण के लिए, आम निर्माण उपकरण या तो साथ एक निर्देशिका में एक फ़ाइल का नाम buildprojectreferenecs.targets बनाने के लिए, सामग्री
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="BuildProjectReferences" BeforeTargets="BuildGenerateSources">
<MsBuild Projects="@(ProjectReference)"
Properties="Configuration=$(Configuration);Platform=$(Platform)"/>
</Target>
</Project>
यह केवल एक ही विन्यास और यह सहित परियोजना के रूप में मंच के साथ प्रत्येक ProjectReference बनाता है के साथ। प्रोजेक्टरेंस का उपयोग करने वाली प्रत्येक प्रोजेक्ट में इसे आयात करें। प्रोजेक्ट रेफरेंस आइटम को परिभाषित करने के बाद आयात होना आवश्यक है, इसलिए इसे उदा।
...
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <!-- this is near the bottom already -->
<Import Project="..\BuildProjectReferences.targets" /> !<-- add this -->
...
</Project>
अब अगर आप किसी बिल्ड चलाने के लिए, इससे पहले कि वास्तविक संकलन शुरू होता है संदर्भित परियोजनाओं के निर्माण हो जाएगा (और बदले में उनके संदर्भित परियोजनाओं के, आदि) कोई बात नहीं अगर वे में हैं: निचले भाग में सभी तरह समाधान या नहीं। कुछ नुकसान:
- आप एक परियोजना refernce जोड़ते हैं, लेकिन इस फाइल को कुछ भी नहीं है आयात करने के लिए भूल जाते हैं अगर ऐसा होता
- निर्माण बिना शर्त होती है, इसलिए यदि संदर्भ परियोजना पहले से ही बनाया गया है निर्माण फिर से शुरू की है, हालांकि यह निर्माण प्रणाली को तुरंत देखेगा क्योंकि सभी आउटपुट अद्यतित हैं
- वीएस में बिल्ड सिस्टम समाधान के बाहर संदर्भित परियोजनाओं में परिवर्तनों का पता नहीं लगाएगा, इसलिए यदि समाधान में सभी परियोजनाएं ऊपर हैं- अद्यतित और आप समाधान के बाहर एक संदर्भित परियोजना में एक स्रोत फ़ाइल को बदलते हैं, जिसे इसे नहीं बनाया जाएगा। हालांकि कमांडलाइन के निर्माण के मामले में यह मामला नहीं है, वहां परियोजनाओं का निर्माण शुरू हो जाएगा और इसलिए संदर्भित परियोजनाएं भी बनाई जाएंगी।
सब कुछ, मुझे यकीन नहीं है कि यह इसके लायक है या नहीं। चूंकि आपने तर्कसंगत रूप से 'सिंगल मास्टर सॉल्यूशन' दृष्टिकोण का चयन किया है, इसलिए समाधान वास्तव में परियोजना के लिए एकल समाधान होना चाहिए और इस तरह स्रोत से बनाए गए सभी निर्भरताओं में होना चाहिए। और यह सुनिश्चित करने के लिए डेवलपर का कार्य है कि ऐसा होता है।इतनी तेजी से विफलताओं को पकड़ने के लिए सबसे अच्छा समाधान एक बिल्ड सर्वर है जो प्रत्येक प्रतिबद्धता को कोडबेस पर बनाता है और इस तरह की त्रुटियों को तेजी से खोजता है। डेवलपर्स को तब भी उनकी गलतियों के बारे में अधिसूचित किया जाता है और जल्द ही ठीक हो जाएगा (विशेष रूप से यह छोटा है)।
क्या भाषा? सी ++? आप प्रोजेक्ट संदर्भों का उपयोग कर सकते हैं, वे समाधान फ़ाइल के बजाय प्रोजेक्ट फ़ाइल का हिस्सा हैं, इसलिए इसका उपयोग करने वाले प्रत्येक समाधान को स्वचालित रूप से संदर्भ प्राप्त होगा। – stijn
हां, सी ++। हम संदर्भों का उपयोग करते हैं, लेकिन यदि एक संदर्भित परियोजना समाधान में नहीं है, तो क्या विजुअल स्टूडियो को इसे बनाने के लिए कहने का कोई तरीका है? – traal
मुझे पूरा यकीन है कि कोई अंतर्निहित तरीका नहीं है। आप एक एमएसबिल्ड लक्ष्य के साथ एक फाइल बना सकते हैं जो सिर्फ सभी परियोजना संदर्भों को बनाता है, फिर उस फाइल को अपनी सभी परियोजनाओं में शामिल करें। लगभग सही यह नहीं था कि यह अभी भी निर्माण नहीं करेगा अगर उदा। समाधान ए में कोई बदलाव नहीं है लेकिन एक परियोजना से स्रोत फ़ाइलों में परिवर्तन हैं जो समाधान ए के बाहर है क्योंकि ए को अपनी परियोजनाओं में किसी भी बदलाव का पता नहीं लगाएगा। यह शायद भी तय किया जा सकता है, लेकिन यह पहले से ही कठिन है। वैसे भी: जिस समाधान का मैं चयन करता हूं वह सीआई सेटअप कर रहा है, इसलिए किसी भी बिल्ड ब्रेकेज की शुरुआत जल्दी ही की जा रही है:] – stijn