2016-01-15 6 views
7

के तहत सीआई कतार पर निर्माण करते समय संकुल बहाल नहीं किए गए हैं मैंने question about build errors से पूछा है और इस मुद्दे को मेरे हताश स्व द्वारा आगे की जांच जारी रखी है।टीएफएस (वीएस ऑनलाइन वीएस2015)

मेरे पास एक अनुमान है कि समस्या उन संकुलों के बारे में है जो सही तरीके से नहीं रखी गई हैं। दर्दनाक उबाऊ लॉग के माध्यम से देखकर मुझे यह दिया।

2016-01-15T21: 50: 40.8680146Z
लक्ष्य "BeforeGenerateProjectPriFile" एक BeforeTargets में सूचीबद्ध "में विशेषता C: \ Program Files (x86) \ MSBuild \ Microsoft \ NuGet \ Microsoft.NuGet.targets (186,61) "परियोजना में मौजूद नहीं है, और इसे अनदेखा कर दिया जाएगा।

इसके तुरंत बाद, मैं कुछ रास्ते पर जाने का पहला संकेत देख सकता हूं।

2016-01-15T21: 50: 43.9631666Z ## [चेतावनी]
C: \ Program Files (x86) \ MSBuild \ 14.0 \ बिन \ Microsoft.Common.CurrentVersion.targets (1819,5) : चेतावनी MSB3245: इस संदर्भ को हल नहीं कर सका। असेंबली का पता नहीं लगा सका "माइक्रोसॉफ्ट.कोडडॉम.प्रोवाइडर। डॉटनेट कॉम्पलरप्लाफ्टर, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, पब्लिककेट टोकन = 31bf3856ad364e35, प्रोसेसर आर्किटेक्चर = एमएसआईएल"। यह सुनिश्चित करने के लिए जांचें कि असेंबली डिस्क पर मौजूद है। यदि यह संदर्भ आपके कोड द्वारा आवश्यक है, तो आप संकलन त्रुटियां प्राप्त कर सकते हैं।
2016-01-15T21: 50: 43.9631666Z 2>
सी: \ प्रोग्राम फ़ाइलें (x86) \ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1819,5): चेतावनी MSB3245: हल नहीं कर सका यह संदर्भ असेंबली का पता नहीं लगा सका "माइक्रोसॉफ्ट.कोडडॉम.प्रोवाइडर। डॉटनेट कॉम्पलरप्लाफ्टर, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, पब्लिककेट टोकन = 31bf3856ad364e35, प्रोसेसर आर्किटेक्चर = एमएसआईएल"। यह सुनिश्चित करने के लिए जांचें कि असेंबली डिस्क पर मौजूद है। यदि यह संदर्भ आपके कोड द्वारा आवश्यक है, तो आप संकलन त्रुटियां प्राप्त कर सकते हैं। [सी: \ a \ 1 \ s \ MyStuff \ MyStuff.csproj]

और फिर यह मौजूद सामानों पर विचार करने के बारे में बहुत कुछ जारी है।

2016-01-15T21: 50: 43.9661661Z
माना जाता है ".. \ संकुल \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 \ lib \ net45 \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll ", लेकिन यह अस्तित्व में नहीं था।
2016-01-15T21: 50: 43.9671655Z
खोजपाथ "{targetFrameworkDirectory}" के लिए। 2016-01-1521: 50: 43.9681655Z
"सी: \ प्रोग्राम फ़ाइलें (x86) \ संदर्भ असेंबली \ माइक्रोसॉफ्ट \ फ्रेमवर्क.NETFramework \ v4.5.2 \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.winmd" माना जाता है, लेकिन यह अस्तित्व में नहीं था
...

मैं तो यह मुझे बहुत जहां समस्या पर हड़ताल करने के बारे में थोड़ा बताता है पर TFS और न ही वी.एस. ऑनलाइन सीआई से परिचित नहीं हूँ। मैंने खुद को आधी से मौत की गुमराह कर दी है और पूरे पोर्टल पर विभिन्न सेटिंग्स की एक गजबियन का परीक्षण किया है। कोई भाग्य नहीं। मैं अन्य त्रुटियों का कारण बन सकता हूं (जब मुझे पता है कि मैं गलत सामान आदि में टाइप कर रहा हूं) लेकिन एक तरफ या दूसरा, मैं इस पर घूमता हूं।

किसी भी संकेत की सराहना की जाएगी।

+0

यह NuGet संकुल को याद करने जैसा लगता है। आपके पास आखिरी हिस्सा है, जहां यह असेंबली ढूंढने की कोशिश कर रहा है - वह स्थान 'हिंटपाथ' (जिसे पहले माना जाता है) से आ रहा है कि NuGet .csproj में जोड़ता है। मुझे लगता है कि या तो आपकी पैकेज फ़ाइल सही ढंग से सेटअप नहीं है (क्या वह संस्करण, '1.0.0', पैकेज.config में क्या है?) या NuGet पुनर्स्थापना नहीं कहा जा रहा है। चूंकि यह वीएसओ है, मुझे लगता है कि यह वीएस2015/टीएफएस2013 + है? TFS2013 + बिल्ड टेम्पलेट MSBuild कहलाए जाने से पहले स्वचालित रूप से NuGet संकुल को पुनर्स्थापित कर देगा। – makhdumi

+1

पहला भाग हानिरहित लगता है। Https://github.com/NuGet/Home/issues/1814 देखें। साथ ही, यदि आप VS2015 का उपयोग कर रहे हैं, तो आपको nuget.targets फ़ाइल से दूर माइग्रेट करना चाहिए (आपको अपनी सभी .csproj फ़ाइलों से आयात को हटाने की आवश्यकता है, और पूरी तरह से हटाएं। Nugets फ़ोल्डर)। यदि nnget फ़ोल्डर मौजूद है तो VS2015/TFS2015 अलग-अलग व्यवहार करेगा। – makhdumi

+0

@ अल-मुंडिस यह वीएस2015, अच्छा अनुमान है। फ़ाइल packages.config बिल्कुल मेरे द्वारा संपादित नहीं किया गया है। जैसा कि मैंने स्थापित किया था वहां यह मिला। एफई। तो संस्करण सही होना चाहिए। मैं इसे स्थानीय रूप से संकलित करने के लिए भी मिलता हूं। क्या मुझे सभी पैकेजों को हटा देना चाहिए और यह सत्यापित करने के लिए पुन: निर्माण करना चाहिए कि यह सही पैकेज लोड करता है? –

उत्तर

6

संस्करण वीएस2015 से शुरू होने पर, NuGet फ़ोल्डर की आवश्यकता नहीं है, जो मैंने देखा है उसके विपरीत। वास्तव में, एकमात्र फ़ाइल जो आवश्यक है वह संकुल के साथ विन्यास है।संकुल और उनके निष्पादन योग्य वस्तुओं की जांच करने के लिए आम लेकिन बहुत ही धोखेबाज काम है, लेकिन यह सड़क के नीचे कई मुद्दों को बना सकता है। मैं इसकी अनुशंसा नहीं करता क्योंकि यह समस्या को छिपा रहा है, इसे हल नहीं कर रहा है।

सबसे पहले, सत्यापित करें कि आपका निर्माण वास्तव में संकुल को पुनर्स्थापित करता है। मैंने देखा कि त्रुटि लॉग में, ऐसा लगता है कि यह करता है लेकिन यह एक गड़बड़ है। यह वास्तव में सफलता की बहाल करने का प्रयास नहीं है। आप इस तरह से एक चेतावनी का सामना (और एक ही NuGet के नियंत्रण में NUnit, WebGrease, NewtonSoft या किसी अन्य पैकेज के लिए चला जाता है) हैं:

MSB3245 चेतावनी: इस संदर्भ को हल नहीं कर सका। विधानसभा "EntityFramework" का पता नहीं लगा सका। यह सुनिश्चित करने के लिए जांचें कि असेंबली डिस्क पर मौजूद है।

PrepareForBuild:
निर्देशिका बनाने में "obj \ डीबग \" यह सत्यापित करते हुए लॉग निम्न मार्ग को शामिल द्वारा

शुरू।
...
RestorePackages:
"C: \ एक \ src \ src.nuget \ nuget.exe" स्थापित "C: \ एक \ src \ src \ xxxx.Entities \ packages.config"
स्रोत -RequireConsent -o "सी: \ a \ src \ src \ packages"
...
सफलतापूर्वक "EntityFramework 6.3.1" स्थापित किया गया। ResolveAssembly संदर्भ:
प्राथमिक संदर्भ "EntityFramework"।

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

  1. पहले, मैं एक ब्रांड नई परियोजना ऑटो बनाया था और यह जाँच। निर्माण सफल रहा।
  2. फिर, मैंने इकाई फ्रेमवर्क जोड़ा और बिल्ड आपके जैसा ही चेतावनी के साथ विफल रहा।
  3. अंत में, मैंने packages.config फ़ाइल में चेक किया। निर्माण सफल हुआ।

enter image description here

समस्या होती है क्योंकि प्रारंभिक चेक-इन फ़ाइलों की अनदेखी करने के एक नंबर का चयन करता है। अधिकतर यह बिन, obj इत्यादि है, लेकिन packages.config भी है। इसे विशेष रूप से अनदेखा के रूप में चुना जाना चाहिए। अगर कोई सभी फाइलों में जांच करता है (मेरे विचार में बहुत बुद्धिमान नहीं), तो उसे फ़ाइल की आवश्यकता भी होती है और ऐसा लगता है जैसे वे इसे सही कर रहे हैं। कृपया ध्यान दें कि आपको फ़ाइल को पहले संस्करण नियंत्रण में जोड़ना चाहिए। इस तरह, यह प्रत्येक परिवर्तन पर चेक किया जा रहा है। अन्यथा, यदि आप स्थानीय रूप से नया पैकेज जोड़ते हैं या यदि आप मौजूदा अपडेट करते हैं तो समस्याएं फिर से दिखने लगती हैं।

अगर आपको चेतावनी मिलती है लेकिन पैकेज बहाल किए जाते हैं (लॉग में सूचीबद्ध लाइनें हैं), स्थानीय रूप से पैकेज को अपडेट करने या इसे पुनर्स्थापित करने का प्रयास करें। अंत में, आप Update-Package -Reinstall चलाकर पैकेज प्रबंधक कंसोल से स्थापना को रीफ्रेश कर सकते हैं।

  • पैकेज प्रबंधक here के पुराने संस्करण के साथ समान समस्या।
  • उन फ़ाइलों पर गलत सलाह जो चेक इन करने की आवश्यकता है (वीएस 2015 के बाद से) here
  • फ़ाइल लेआउट का पुराना विवरण (वीएस 2013 और पहले के लिए मान्य) here
  • NuGet फ़ाइलों की संरचना को कैसे बनाया गया है इस बारे में अधिक जानकारी here बनाया गया है।
  • इस मुद्दे पर बहुत अच्छा ब्लॉग (अजीब बात यह है कि यह Google में शीर्ष पर नहीं आता है) here
+1

मैं आपके उत्तर की शुद्धता की पुष्टि कर सकता हूं, इसलिए मैं इसे एक उत्तर के रूप में स्वीकार करूंगा। हालांकि, कंसोल एप्लिकेशन में आपके चरणों का पालन करने में सक्षम होने पर (इसे बनाया गया, निर्माण तोड़ दिया, निर्माण बहाल किया गया), मैंने देखा कि यह एमवीसी परियोजनाओं के लिए मान्य नहीं है! मुझे एक ही त्रुटि मिलती है भले ही मेरे पास packages.config अपलोड हो! अपने आप को देखो। डिफ़ॉल्ट, वेनिला एएसपी.नेट एमवीसी ... –

+1

मैंने सब कुछ करने की कोशिश की लेकिन 'अपडेट-पैकेज-रीइंस्टॉल' और उस कमांड ने कॉन्फ़िगरेशन का एक समूह tweaked और कुछ अतिरिक्त फ़ाइलों को डाउनलोड किया। सबसे विशेष रूप से यह मेरे संकुल के लिए संकेतों को अद्यतन करता है लेकिन यह 'EnsureNuGetPackageBuildImports' लक्ष्य को भी दोबारा जोड़ता है जिसे मैंने मैन्युअल रूप से हटा दिया था। उन परिवर्तनों की जांच करने के बाद कुडू तैनाती ने काम किया और वास्तव में तेज़ था –

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