2009-07-22 19 views
17

मेरे विजुअल स्टूडियो समाधान में एक वेब एप्लिकेशन और एक यूनिट टेस्ट एप्लिकेशन शामिल है। मेरा वेब एप्लिकेशन log4net का उपयोग करता है। मैं अपने समाधान का निर्माण करने के लिए कमांड लाइन से msbuild का उपयोग करने में सक्षम होना चाहता हूं। हालांकि, जब भी मैं कमांड लाइन से समाधान बनाता हूं, मुझे बिल्ड त्रुटियां मिलती हैं क्योंकि यह log4net.xml को टेस्ट प्रोजेक्ट की बिन निर्देशिका में कॉपी नहीं कर सकती है।मैं विजुअल स्टूडियो को बिन निर्देशिका में xml दस्तावेज़ फ़ाइलों को लॉक करने से कैसे रोक सकता हूं?

त्रुटि संदेश है:।

"फ़ाइल 'बिन \ डीबग \ log4net.xml' को '\ बिन \ log4net.xml' कॉपी करने के लिए रास्ते पर पहुँच 'में असमर्थ \ बिन \ log4net.xml ' वर्जित किया गया है।"

ऐसा लगता है कि विजुअल स्टूडियो इस फ़ाइल को लॉक कर रहा है, लेकिन मुझे पता नहीं लगा कि इसकी आवश्यकता क्यों होगी। क्या वीएस को एक्सएमएल दस्तावेज फाइलों को लॉक करने से रोकने के लिए कोई तरीका है जो इसे लोड किया गया है?

उत्तर

1

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

ध्यान दें कि यह वास्तव में मूल समस्या को हल नहीं करता है क्योंकि xml फ़ाइलों को अभी भी बंद कर दिया गया है, लेकिन यह कामकाज हमारे लिए पर्याप्त था क्योंकि हमारे XML दस्तावेज़ की वास्तविक सामग्री अक्सर नहीं बदली जाती है।

0

असल में बिन फ़ोल्डर में फ़ाइलों की जांच न करें, यह एक बुरा विचार है।

आप इस फ़ाइल को दूसरी निर्देशिका में छोड़ सकते हैं और इसे वहां से संदर्भित कर सकते हैं या उस कोड को स्थानांतरित कर सकते हैं जो इसे लाइब्रेरी में उपयोग करता है और उस पर पोस्ट बिल्ड इवेंट है जो इसे अपनी बिन निर्देशिका में कॉपी करता है और फिर संदर्भ देता है।

MSBuild तो कॉपी करेंगे webprojects बिन निर्देशिका के लिए आप :) कि

हम लोगों को, बिन निर्देशिका के लिए सामान में जाँच जब तक आप पूरी तरह से बिन निर्देशिका करने के लिए है या तो में नहीं जाँच की जानी चाहिए साथ इस सटीक मुद्दा है लॉकिंग मुद्दों के इन प्रकारों से बचने के लिए बिल्कुल या वहां। ताज़ा फ़ाइलें हैं। जबाब पर

थोड़ी देर हो चुकी, खेद :)

+0

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

+0

आह इसके बारे में खेद है, मैंने इसे फिर से पढ़ लिया है और आप सही हैं :) हालांकि मुझे यह बहुत अजीब लगता है कि आप इस प्रकार की परियोजनाओं पर पोस्ट और प्री बिल्ड इवेंट्स का उपयोग करने में असमर्थ हैं, अंत में एक निर्भरता निर्देशिका होने से समस्या को हल करना और msbuild हमेशा असेंबली को सही ढंग से कॉपी करता है। –

1

Krystan लिखा है:

आप किसी अन्य निर्देशिका में इस फ़ाइल ड्रॉप और वहाँ या एक पुस्तकालय में उपयोग करता है जगह कोड से इसे संदर्भ और पर है कि वह अपने बिन निर्देशिका के लिए नकल के बाद निर्माण घटना हो सकता था और फिर संदर्भ।

हमारी एक्सएमएल फ़ाइल लॉकिंग समस्या प्रोजेक्ट बिन निर्देशिका में नहीं बल्कि बाहरी संदर्भ निर्देशिका में है। TortoiseSVN-> अपडेट करते समय हमने इसे मारा जहां एक नया संस्करण उपलब्ध है। मान लीजिए क्योंकि वीएस इंटेलिजेंस के लिए फाइल का उपयोग कर रहा है।

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

यहां उम्मीद है कि एमएस इसे वीएस 2010 में ठीक करे।

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है। आपका कामकाज अच्छी तरह से काम करता है लेकिन यह अजीब बात है कि टीएसवीएन एसीएन फ़ाइल को हटा देता है, फिर भी इसे ओवरराइट नहीं करता है! –

8

मैं निम्नलिखित समाधान मिल गया है: वी.एस. postbuild घटना में या NAnt/MSBuild लिपि में cmd ​​स्क्रिप्ट को निष्पादित

handle.exe -p devenv [Path to the folder with locked files] > handles.txt 

FOR /F "skip=5 tokens=3,4 delims=: " %%i IN (handles.txt) DO handle -p %%i -c %%j -y 

handle.exe http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx

स्क्रिप्ट की पहली पंक्ति यहाँ उपलब्ध है VS द्वारा लॉक की गई फ़ाइलों के लिए सभी हैंडल हैंडल करने के लिए डंप करता है दूसरी पंक्ति फ़ाइल से हैंडल आईडी पढ़ती है और हैंडल

स्क्रिप्ट निष्पादित फ़ाइलों के बाद रीम हो सकती है Oved/प्रतिस्थापित/ले जाया आदि

+0

उत्कृष्ट उत्तर। एक आकर्षण की तरह काम करता है, और मुझे अपनी बिल्ड स्क्रिप्ट लिखने देता है जैसे विजुअल स्टूडियो एक दुर्भावनापूर्ण वीएस के आसपास मेरी बिल्ड स्क्रिप्ट लिखने के बजाय व्यवहार कर रहा है। – Adam

+1

मैं हैंडल 3.46 का उपयोग कर रहा हूं और मुझे 'टोकन = 3,4'' टोकन = 3,6' में बदलना पड़ा। उसके बाद यह पूरी तरह से धन्यवाद काम किया। – OlduwanSteve

2

आप उत्पादन से & pdb फ़ाइलें पूरी तरह एक्सएमएल को छोड़ते हुए के साथ ठीक हो, तो आप कमांड लाइन पर MSBuild को /p:AllowedReferenceRelatedFileExtensions=none पारित कर सकते हैं।

(संबंधित जवाब https://stackoverflow.com/a/8757941/251011 के लिए धन्यवाद)

संपादित करें: https://stackoverflow.com/a/23069603/251011

+1

इसके अलावा: यह थोड़ा मनोरंजक है कि लगभग पांच वर्षों के बाद वीएस अभी भी इस तरह ताला लगा है और हम अभी भी * क्यों * नहीं जानते हैं। –

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

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