2008-11-13 10 views
19

मेरे पास एक एमएसबिल्ड प्रोजेक्ट है जो दृश्य स्टूडियो से एसएलएन फ़ाइल बनाता है जिसमें सभी परियोजनाएं (लगभग 70+ प्रोजेक्ट) रखती हैं, और कई परियोजनाएं एक-दूसरे पर निर्भर होती हैं जिसका अर्थ है कि उन्हें क्रम में निर्माण करने की आवश्यकता है - कभी-कभी डेवलपर समाधान फ़ाइल में दृश्य स्टूडियो में मैन्युअल रूप से बिल्ड ऑर्डर सेट करना भूल जाता है जिससे एमएसबिल्ड एक साफ समाधान पर असफल हो जाता है क्योंकि कुछ ऑर्डर के बाहर बनाया जाता है/एक डीएल नहीं मिल सकता है।एमएसबिल्ड - क्या यह एक समाधान फ़ाइल में परियोजना निर्भरताओं को काम कर सकता है? यदि हां, तो कैसे?

क्या एमएसबिल्ड के लिए सभी परियोजनाओं को लेने और निर्भरताओं को पूरा करने और परियोजनाओं का निर्माण करने का कोई तरीका है, अगर मैं ऐसा कैसे करूँ? एक एमएसबिल्ड कार्य का उपयोग कर? मौजूदा प्रयासों के साथ ऐसा लगता है कि यह परियोजनाओं को पढ़ने के क्रम में बनाता है - अगर मैं प्रोजेक्ट फाइलों + पथों की एक सूची में पास करता हूं।

वर्तमान में यह एकमात्र तरीका है जिसे मैं हल करने के लिए सोच सकता हूं वह एक बाहरी ऐप है जो प्रोज फाइलों और संदर्भों को स्कैन करता है और फिर हर बार मैन्युअल रूप से समाधान बनाता है .. लेकिन यह इतनी सरल चीज़ के लिए अधिक लगता है।

किसी ने इसे पहले हल/देखा है?

+0

क्या आप डेवलपर्स द्वारा इसका मतलब बता सकते हैं कि वीएस में मैन्युअल रूप से बिल्ड ऑर्डर सेट नहीं कर रहा है? –

+0

क्या यह आपकी समस्या है? यह वर्तमान में मुझे परेशानी दे रहा है। http://social.msdn.microsoft.com/Forums/en/msbuild/thread/80cc6447-b720-4806-8395-7c257b207613?prof=required कोई अच्छा समाधान प्रतीत नहीं होता है। मुझे लगता है कि हम .sln फ़ाइल के माध्यम से पार्स करने के लिए एक उपकरण लिखने जा रहे हैं, टैग के लिए संदर्भित .csproj फ़ाइलों को देखें, और उस जानकारी को .sln फ़ाइल में वापस कॉपी करें। –

उत्तर

1

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

ऐसा लगता है कि आप प्रोजेक्ट संदर्भों का उपयोग नहीं कर रहे हैं। मैं हमेशा परियोजना संदर्भों की सिफारिश करता हूं।

4

आप MSBuild को कैसे कॉल कर रहे हैं? यदि आप समाधान फ़ाइल में MSBuild को इंगित करते हैं, तो यह निर्भरताओं को पूरा करने में सक्षम होना चाहिए। यदि आप इसे अलग-अलग प्रोजेक्ट फ़ाइलों पर इंगित करते हैं, तो यह किसी भी परियोजना संदर्भ को हल करने में सक्षम नहीं होगा।

यदि आप प्रोजेक्ट संदर्भों का उपयोग नहीं करते हैं तो आप निर्भरता को मैन्युअल रूप से सेट करने के लिए "प्रोजेक्ट निर्भरता" संवाद का उपयोग करके समाधान में निर्भरता आदेश को नियंत्रित कर सकते हैं।

0

हालांकि यह सही है कि जब आप परियोजना निर्भरताओं का उपयोग करते हैं तो एमएसबिल्ड को निर्माण आदेश का पालन करना चाहिए, वहां एक चेतावनी है। वर्तमान में स्वच्छ लक्ष्य बनाने के दौरान रिवर्स बिल्ड ऑर्डर का निरीक्षण नहीं करता है (जैसा कि मैंने here ब्लॉग किया है)। नियमित रूप से निर्माण के लिए हालांकि यह दूसरों द्वारा वर्णित अनुसार अच्छी तरह से काम करता है।

1

यह एक पुराना सवाल है, लेकिन इस मुद्दे में सबसे अधिक संभावना है कि समाधान में परियोजनाएं परियोजना संदर्भों का उपयोग करने के बजाय निर्भर डीएलएल (संदर्भ> ब्राउज़ टैब का चयन करें> निर्भर डीएलएल का चयन करें) के संदर्भ में प्रत्यक्ष संदर्भ का उपयोग करती हैं (संदर्भ जोड़ें> प्रोजेक्ट टैब का चयन करें > निर्भर परियोजना का चयन करें)। प्रत्यक्ष संदर्भों के साथ, विजुअल स्टूडियो निर्भरता श्रृंखला का पता नहीं लगा सकता है। आपको समाधान नोड पर राइट क्लिक करके और गुणों का चयन करके इसे बताना होगा। आवश्यक परियोजनाओं को सेट करने के लिए सामान्य गुण> परियोजना निर्भरता चुनें। श्री क्लाउस सही है लेकिन मैं इस मुद्दे को ठीक करने का तरीका दस्तावेज़ बनाना चाहता था।

4

जबकि परियोजना निर्भरता बनाए रखने के लिए कड़ी मेहनत और .sln फ़ाइलों में नहीं साझा कर रहे हैं, परियोजना संदर्भ सम्मानित कर रहे हैं और लगातार क्रम हुक्म है - Microsoft.Common.targets में ResolveReferences कार्य देखते हैं।

एएसआईडीई: एक 'मेरा दोस्त' 'एक पुनर्रचना के दौरान' द्वारा गलती से उनके बिल्ड Task टोंटदार हो सकता है और यह Microsoft.Common.targetsResolveReferences कार्य करने के लिए DependsOnTargets संबंध है और साथ ProjectReferences तरीके कि यहां सवाल की तरह ध्वनि में सम्मानित नहीं किया जा रहा समाप्त हो गया । यदि आप read some of the posts हैं, तो आपको यह विचार मिल सकता है कि यह सब पागल है - यह नहीं है; shaky बिट्स परियोजना निर्भरता हैं, परियोजना संदर्भ नहीं।


this excellent MSDN Blog article by Dan Moseley कि वास्तव में कुछ उपयोगी वैकल्पिक हल रणनीतियों सहित विषय बताते हैं, देखें। (this mildly related issue with building xUnit.net के माध्यम से)।

0

मैं c: \ windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe पर मिली एमएसबिल्ड 4 का उपयोग कर रहा हूं, यह समस्या हल करने लगता है।

0

कोई माइक्रोसॉफ्ट टूल नहीं है जो आपकी 70+ परियोजनाओं की सभी निर्भरताओं की जांच करेगा और आपके लिए स्पष्ट रूप से घोषित निर्भरताओं के साथ समाधान फ़ाइल उत्पन्न करेगा।

वैसा करने के लिए अपने दम पर 2 अलग तरीकों का उपयोग करके है:

  1. मैन्युअल रूप से एक निर्भरता, समाधान के लिए, दृश्य स्टूडियो में निर्दिष्ट करें।
  2. प्रोजेक्ट फ़ाइल में एक प्रोजेक्ट संदर्भ निर्दिष्ट करें।

यदि आप ऐसा नहीं करना चाहते हैं, तो आपको दवा निगलनी होगी और स्वीकार करेंगे कि आप अपने लिए ऐसा करने के लिए बाहरी उपकरण का उपयोग करेंगे। हां यह घबराहट है लेकिन इसे काम करने के लिए बनाया जा सकता है। यदि आप अपने स्रोत नियंत्रण में अपनी समाधान फ़ाइल में चेक इन करते हैं तो आप इन समस्याओं को कम कर सकते हैं। जब तक आपके पास काम करने के लिए एक सक्रिय समाधान फ़ाइल है।

मैं एक बिंदु पर नहीं था, और मेरे निर्माण में 600+ परियोजनाएं थीं। इसलिए मैंने एक उपकरण लिखा (साल पहले) जो इस काम का 99% स्वचालित करेगा। यह msbuild फ़ाइलों को पढ़ने के लिए .NET MSBuild API का उपयोग करता है (xml एपीआई के साथ यहां पहिया को पुन: प्रयास नहीं करता है)। इसके बाद आउटपुट और इनपुट की जांच होती है और एक निर्भरता पेड़ उत्पन्न होता है जिसे मैं इसके साथ कुछ चीजें कर सकता हूं:

  1. एक समाधान फ़ाइल थूकें।
  2. एक निर्भरता प्रकार (अकादमिक में एक स्थलीय प्रकार भी) करें, और उन परियोजनाओं को थूक दें ताकि उन्हें बनाया जा सके (गैर-समांतर प्रकार के निर्माण के लिए, जो कभी-कभी उपयोगी हो सकता है)।
  3. निर्भरताओं के बारे में नैदानिक ​​जानकारी के सभी प्रकार प्रिंट करें।

टूल के साथ मैंने जो एकमात्र सीमा देखी है वह कुछ पागल COM निर्भरताओं के साथ है जो वैसे भी सुंदर स्केची हैं। जिसे मैंने एक सुपर सरल काम जोड़ा।

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

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