msbuild.exe खुली रहना, फ़ाइलों को लॉक करना


98

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

ऐसा लगभग हर बार होता है ।

मैं वास्तव में इस पर खो गया हूं, इसलिए मैं यथासंभव विस्तार प्रदान करने की कोशिश करूंगा।

  • सर्वर एक इंटेल कोर i7, 2 जीबी रैम है, जिसमें विंडोज सर्वर 2008 मानक 64-बिट SP2 है।
  • TeamCity में, msbuild धावक को /mकमांड-लाइन पैरामीटर (जो कई कोर का उपयोग करने का मतलब है) के साथ कॉन्फ़िगर किया गया है
  • विचाराधीन फ़ाइल हमेशा एक ही बाहरी DLL है जो .NET प्रोजेक्ट्स में से एक में संदर्भित है, पथ में External Tools\Telerik\Telerik.Reporting.Dll। (कई अन्य .DLL फाइलें External Toolsएक समान पथ संरचना में dir में शामिल हैं जो कभी भी इस समस्या का कारण नहीं होती हैं)। वर्तमान में यह टेलरिक रिपोर्टों के परीक्षण संस्करण के साथ है, इस मामले में जो कोई अंतर करता है।
  • जब समस्या होती है, तो msbuild.exe *32टास्क प्रबंधक में हमेशा कई प्रक्रियाएं सूचीबद्ध होती हैं: मेरा मानना ​​है कि 7. प्रक्रिया एक्सप्लोरर का उपयोग करके, वे सभी शीर्ष-स्तरीय प्रक्रियाओं (माता-पिता नहीं) की तरह दिखते हैं। वे सभी 20-50MB से उपयोग कर रहे हैं RAM, और 0.0% CPU।
  • अगर मैं 1-3 मिनट प्रतीक्षा करता हूं, तो msbuild.exe प्रक्रिया अपने आप ही बाहर निकल जाती है, और TeamCity तब कार्य निर्देशिका को ठीक से अपडेट कर सकती है।
  • यदि मैं मैन्युअल रूप से msbuild प्रक्रियाओं को समाप्त करता हूं, तो TeamCity का अपडेट तुरंत फिर से काम करेगा।
  • अनुक्रमण सेवाओं को विंडोज में बंद कर दिया जाता है (हालांकि पहले के दो अंक बहुत अधिक पुष्टि करते हैं कि यह msbuild.exe समस्या पैदा कर रहा है)।
  • Telerik.reporting.dll पर कोई विशेष गुण नहीं हैं। केवल एसवीएन संपत्ति हैsvn:mime-type = application/octet-stream

क्या इससे पहले किसी ने इसे चलाया है?

जवाबों:


123

के msbuildसाथ प्रयोग करें /nr:false

संक्षेप में: MSBuild तेजी से, विशेष रूप से समानांतर बिल्ड के साथ, बहुत सारी चीजें करने की कोशिश करता है। यह "नोड्स" के बहुत से भाग देगा - व्यक्तिगत msbuild.exe प्रक्रियाएं जो परियोजनाओं को संकलित कर सकती हैं, और चूंकि प्रक्रियाओं को स्पिन करने में थोड़ा समय लगता है, निर्माण पूरा होने के बाद, ये प्रक्रियाएं चारों ओर लटकाती हैं (डिफ़ॉल्ट रूप से, 15 मिनट के लिए, मुझे लगता है ), ताकि यदि आप जल्द ही फिर से निर्माण करें, तो ये नोड्स "पुन: उपयोग" किए जा सकते हैं और प्रक्रिया सेटअप लागत को बचा सकते हैं। लेकिन आप उपर्युक्त कमांड-लाइन विकल्प के साथ नोडर्यूज़ को बंद करके उस व्यवहार को अक्षम कर सकते हैं।

यह सभी देखें:


2
समझ में आता है: ऐसा नहीं लगता है अगर मैं हटा / मी। मैं अब कोशिश कर रहा हूं /m /nr:false, मैं कुछ बिल्ड के लिए दौड़ूंगा और देखूंगा कि यह कैसे चलता है। धन्यवाद
gregmac

26
आपको उस msbuild विकल्प के साथ प्रोजेक्ट बनाने के लिए Visual Studio कैसे मिलता है?
कैमरन टैगगार्ट

1
मैं अभी भी जानना चाहूंगा, लेकिन मैं वास्तव में सी ++ / सीएलआई परियोजनाओं के लिए एक दृश्य स्टूडियो 11 बीटा बग में भाग गया। क्या समान लक्षण होते हैं: Connect.microsoft.com/VisualStudio/feedback/details/728912/…
कैमरन टैगगार्ट

3
समयपूर्व अनुकूलन वास्तव में सभी बुराई की जड़ है। तुम चूसो, Microsoft।
जॉनव्हर्ड

1
@CameronTaggart आप अपने प्रोजेक्ट / समाधान फ़ोल्डर में होस्ट की गई विशेष फ़ाइल के साथ msbuild कमांड लाइन विकल्प जोड़ सकते हैं। Docs.microsoft.com/en-us/visualstudio/msbuild/…
आवश्यकताएं

43

Visual Studio के भीतर नोड पुन: उपयोग को अक्षम करने के लिए, आपको एक पर्यावरण चर का उपयोग करना चाहिए:

MSBUILDDISABLENODEREUSE=1

मैंने इसे प्रभावी ढंग से उपयोग किया है, हालांकि एक और उपकरण है जो अब विफल हो रहा है, जब वी 11 के साथ सी ++ को संकलित किया गया है, जो कि mt.exe है, क्या इसके लिए उपयोग करने के लिए कोई अन्य चर है?
यूजीनियो मिरो

यह वी.एस. में कहीं एक संवाद बॉक्स का उपयोग करके सेट नहीं किया जा सकता है?
dom_beau

1
@dan ईमानदारी से इस एक को खोजने के लिए धन्यवाद, और मैं प्रार्थना कर रहा हूं कि Microsoft.VisualStudio.Web.Host.exe को भी अक्षम करने के लिए एक पर्यावरण चर है।
jerhewet

कमांड लाइन से बिल्ड रन करते समय यह भी काम करता है, जैसे एक बैच स्क्रिप्ट, बिल्ड सर्वर, आदि
डेव ई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.