2009-06-16 5 views
10

से नहीं जब मैं एएसएलएन बनाता हूं जिसमें 2 परियोजनाएं बी.एस.प्रोज़ और सी। एसपीआरओजे शामिल हैं जिनमें आंतरिक परियोजना संदर्भ हैं, यह एमएसबिल्ड में संदर्भ त्रुटियों को फेंकता है। लेकिन जब मैं MSBuild में B.csproj और C.csproj का निर्माण करता हूं तो यह त्रुटियों को फेंक नहीं देता है। और वीएस आईडीई में एएसएलएन का निर्माण भी त्रुटियों को फेंक नहीं देता है। मैं .NET 2.0 ढांचे का उपयोग कर रहा हूं। कृपया एसएलएन और projs बनाने के लिए इस्तेमाल स्क्रिप्ट के नीचे खोजें।एमएसबिल्ड परियोजना संदर्भों के साथ परियोजनाओं को सही तरीके से बनाता है लेकिन समाधान

MSBuild "<path>/A.sln" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\A.sln.log /verbosity:normal 

MSBuild "<path>/B.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\B.csproj.log /verbosity:normal 

MSBuild "<path>/C.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\C.csproj.log /verbosity:normal 

संपादित करें:

सभी त्रुटियों फेंक दिया (सभी परियोजना संदर्भ हैं) refernces लापता के लिए कोड से कर रहे हैं। मुझे नीचे दी गई तीन तरह की त्रुटियां मिलती हैं।

त्रुटि CS0012: प्रकार 'एक्स' को संदर्भित नहीं किया गया है जो एक असेंबली में परिभाषित किया गया है। आपको असेंबली 'वाई, संस्करण = 2.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = aad4cbe5d7c27078' का संदर्भ जोड़ना होगा।

त्रुटि CS0234: प्रकार या नाम स्थान नाम ': प्रकार या नाम स्थान नाम' एक्स ' नाम स्थान' Y '(? आप एक विधानसभा संदर्भ याद कर रहे हैं)

त्रुटि CS0246 में मौजूद नहीं है एक्स 'नहीं पाया जा सका (आप एक का उपयोग कर के निर्देश या एक विधानसभा संदर्भ याद आ रही है?)

मैं दोनों आईडीई और MSBuild से निर्माण से पहले निर्माण रास्तों से सभी पहले से बनाया DLLs को मंजूरी दे दी। लेकिन आईडीई बस ठीक काम करता है और परियोजना के लिए "रिफ्रेंस" खंड में एक संदर्भ गायब संकेतक नहीं दिखाता है।

आईडीई में मैन्युअल रूप से कोई संदर्भ पथ नहीं जोड़ा गया।

एक और अद्यतन:

मैं सिर्फ देखा है कि जब मैं समाधान से दोनों परियोजनाओं को खोलने, संदर्भ सही ढंग से IDE में ओर इशारा करते हैं। लेकिन जब मैं आईडीई में परियोजनाओं को अलग-अलग खोलता हूं, तो एमएसबील्ड में होने वाले लापता संदर्भों का उल्लेख मैंने किया है। बहुत डरावना

तो संक्षेप में प्रस्तुत करने,

Buiilding .proj MSBuild में - अच्छा

Buiilding .proj आईडीई में - त्रुटि

Buiilding .sln MSBuild में - त्रुटि

Buiilding .sln आईडीई में - अच्छा

दिखता है मेरे लिए बहुत डरावना बहुत सराहना की मदद करें।

+9

जब भी आप कोई प्रश्न पूछ रहे हों और कहें कि कोई त्रुटि है, तो यह वास्तव में त्रुटि को काटने और पेस्ट करने में मदद करता है। यह अपवादों, कंपाइलर त्रुटियों के लिए जाता है, त्रुटियों का निर्माण करता है ... –

+0

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

+0

@blntechie के पुनर्निर्माण का कारण बनता है: अद्यतन के लिए धन्यवाद। मेरा सुझाव है कि आप समाधान एक्सप्लोरर का उपयोग करें; प्रत्येक संदर्भ का चयन करें, क्रम में, और गुण विंडो में विवरण देखें। कुछ अजीब देखें, जैसे कि ओब्जे में और दूसरों को बिन में? इसके अलावा, यदि कोई संदर्भ पथ नहीं है, तो आप यह सुनिश्चित करने के लिए अपने .csproj.user फ़ाइलों को देखकर कोई फर्क नहीं पड़ता कि वास्तव में कोई नहीं है? –

उत्तर

8

एमएसबिल्ड और वीएस समाधान निर्माण आदेश का चयन करने के लिए दोनों परियोजना संदर्भों और परियोजना निर्भरताओं का उपयोग करते हैं। इसके अलावा, यह अनिर्धारित है - और आम तौर पर दोनों के बीच अलग है। जांचें कि ये दोनों सही हैं। परियोजना निर्भरता आपके समाधान के गुणों में निर्धारित की जाती है। यदि यह काम नहीं करता है, तो अपनी परियोजनाओं में परियोजना संदर्भों में GUID को दोबारा जांचें समाधान में से मेल खाते हैं। कभी-कभी समाधान को पुनर्जीवित करने से उन्हें ठीक किया जा सकता है।

1

जैसा कि जॉन स्कीट ने उल्लेख किया है, समस्या जानने के लिए एक त्रुटि संदेश उपयोगी होगा। किसी भी विवरण के बिना, हालांकि, यदि यह आईडीई में बनाता है लेकिन एमएसबिल्ड में नहीं बनाया गया है, तो ऐसा लगता है कि आपके पास ऐसी डीएलएल हो सकती है जो आप अपनी परियोजनाओं में संदर्भित कर रहे हैं जो उस मार्ग में उपलब्ध नहीं हैं जहां आप समाधान बना रहे हैं। शायद आप उन्हें मैन्युअल रूप से कॉपी कर रहे थे, आईडीई उन्हें ढूंढ सकता था, या आपके पास एक निश्चित फ़ोल्डर को देखने के लिए आपके आईडीई में स्थापित पथ पथ थे।

प्रश्न पर उन अन्य विवरणों को प्राप्त करते समय जांचने के लिए बस कुछ।

संपादित करें: अब कुछ विवरण हैं, यह समस्या बनाने का आदेश हो सकता है। प्रोजेक्ट बी में प्रोजेक्ट सी में कोई प्रोजेक्ट संदर्भ है? यदि ऐसा है, तो आपको प्रोजेक्ट बी

+0

मेरे मामले में प्रोज सी के पास प्रोजे बी का संदर्भ है और प्रोजे बी प्रोजे सी से पहले बनाता है – blntechie

3

से पहले परियोजना सी बनाने के लिए ऑर्डर को बदलने की आवश्यकता हो सकती है। कुछ चीजों पर विचार करना: आईडीई में समाधान बनाना एसएसएल फ़ाइल पर MSBUILD चलाने जैसा नहीं है। आप बजाय devenv.exe/पुनर्निर्माण एएसएलएन का उपयोग करने का प्रयास कर सकते हैं। आईडीईई एक एसएसएल फ़ाइल बनाने के लिए कई गेम खेलता है, जिसमें "समकक्ष" एमएसबीयूआईएलडी-स्टाइल प्रोजेक्ट भी शामिल है।

इसके अलावा, आईडीई सीधे एमएसबीयूआईएलडी आदेशों को दूर नहीं करता है। प्रदर्शन में सुधार के लिए दोनों के बीच बातचीत है। उदाहरण के लिए, परियोजना में सीएससी कार्यों को शायद आईडीई के अंदर निष्पादित किया जा रहा है, अलग-अलग कमांड लाइन बिल्ड के रूप में, क्योंकि एमएसबीयूआईएलडी ने उन्हें जन्म दिया होगा।

आपको यह देखने के लिए कि कौन सी फाइलों का उपयोग किया जा रहा है, आपको http://technet.microsoft.com/sysinternals/ से प्रक्रिया मॉनिटर प्राप्त करने पर भी विचार करना चाहिए।

4

मेरे लिए, जब मेरे पास यह (या एक समान) समस्या है, तो मैन्युअल रूप से जांच (और फिक्सिंग) ग्रिड लाइन अप मेरी समस्या को हल करता है। .sln और .csproj फ़ाइलों के बीच guids का पता लगाने के लिए यह परेशान है, लेकिन यह काम करता है।

मैं आमतौर पर प्रोजेक्ट संदर्भ छोड़ देता हूं और इसे फिर से जोड़ता हूं, और यह समस्या को हल करता है (एक बार मुझे अपमानजनक गड़बड़ियां मिलती हैं)। शायद मुझे पहले कोशिश करनी चाहिए। ये तो और आसान है।

+1

वही बात मेरे लिए काम करती है। विजुअल स्टूडियो को समीकरण से बाहर ले जाने के लिए और एमएसबिल्ड के साथ पूरी तरह से निर्माण करने की कोशिश करने के लिए जो GUID गलत तरीके से गठबंधन किया गया था, उसे खोजने का सबसे अच्छा तरीका यह है कि त्रुटियों को सतह पर तैरता है। इस आलेख को यह कैसे करें: http://www.codeproject.com/Tips/177770/Creating-MSBuild-projects-from-sln-files.aspx पर यह आलेख देखें – rohancragg

1

जीएसी (सी: \ विन्डोज़ \ असेंबली फ़ोल्डर) से असेंबली निकालें - अपनी असीमित चुनें और राइट क्लिक करें और अनइंस्टॉल करें)।

क्योंकि समाधान guid का उपयोग करके संदर्भ रखता है और यदि वह guid जीएसी में है, तो यह संकलन के लिए जीएसी संस्करण ले जाएगा।