रिलीज़ मोड बिल्ड में XML दस्तावेज़ फ़ाइलों की प्रतिलिपि को कैसे रोकें?


86

मेरे पास एक विज़ुअल स्टूडियो 2010 परियोजना है जो कुछ तृतीय-पक्ष घटकों का संदर्भ देती है। उनकी असेंबली एक्सएमएल प्रलेखन फाइलों के साथ हैं, जो हमारे (और केवल हमारे) डेवलपर्स के लिए उपयोगी हैं। और जब भी प्रोजेक्ट बनाया जाता है (या तो डीबग या रिलीज़ मोड में) तो इन XML फ़ाइलों को बिल्ड डायरेक्टरी में कॉपी किया जाता है।

मैं Visual Studio या MSBuild हालांकि, निर्माण निर्देशिका में उन XML फ़ाइलों की प्रतिलिपि को अक्षम करने के लिए एक सेटिंग या स्विच खोजने के लिए प्रतीत नहीं कर सकता। एक पोस्ट-बिल्ड स्क्रिप्ट एक विकल्प हो सकता है, लेकिन एक बदबूदार। कोई विचार? धन्यवाद।


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

जवाबों:


115

जब आप किसी प्रोजेक्ट का निर्माण करते हैं .xml / .pdb फ़ाइलें ResolveAssemblyReference कार्य के माध्यम से एकत्रित की जाती हैं। जब ResolveAssemblyReference कहा जाता है, तो इसे संबंधित फ़ाइलों के लिए फ़ाइल एक्सटेंशन की एक सूची दी जाती है। फ़ाइल एक्सटेंशन की सूची MSBuild संपत्ति AllowedReferenceRelatedFileExtensions में कैप्चर की गई है । डिफ़ॉल्ट रूप से उस सूची में ".pdb; .xml" होगा।

यदि आप सभी संबंधित संदर्भ फाइलों को उठाया जाना चाहते हैं, तो संपत्ति के मूल्य को किसी ऐसी चीज से हटा दें जिसमें संबंधित फाइलों का विस्तार नहीं होगा। उदाहरण के लिए आप AllowedReferenceRelatedFileExtensions को "-" पर सेट कर सकते हैं ।

आप उस फ़ाइल की सूची को भी कस्टमाइज़ कर सकते हैं जो उसके द्वारा लौटाई जाती है। अगर आप केवल .pdb फाइल ढूंढना चाहते हैं तो आपको इसमें पास होना होगा AllowedReferenceRelatedFileExtensions=".pdb"। उस स्थिति में .dd / .exe के आगे .pdb फ़ाइल के रूप में अच्छी तरह से कॉपी किया जाएगा। आप इसका उपयोग अन्य संबंधित फ़ाइलों को कॉपी करने के लिए भी कर सकते हैं जो कि .pdb / .xml में समाप्त नहीं हो सकती हैं। उदाहरण के लिए यदि आपके पास MyAssembly.dll नाम की एक संदर्भित असेंबली है, और उसी फ़ोल्डर में MyAssembly.pdb और MyAssembly.foo मौजूद है, यदि आप सेट करते हैं AllowedReferenceRelatedFileExtensions=".pdb;.foo"तो .pdb और .foo फ़ाइल दोनों आउटपुट डायरेक्टरी में कॉपी हो जाएंगे।


यह उत्तर है। आपका बहुत बहुत धन्यवाद!
हम्बर्टो

16
यह मजेदार है कि इसका उत्तर पाने में 2 साल लग गए।
इब्राहिम हाशिमी

मुझे बस एहसास हुआ कि मैं इस पर 2 साल पहले टिप्पणी करता हूं, फिर वापस जवाब न देने के लिए खेद है :(
इब्राहिम हाशिमी

7

3
विजुअल स्टूडियो में हम कहां बदल सकते हैं AllowedReferenceRelatedFileExtensions?
Apostrofix

0

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

इसे बदलना चाहिए

<ItemGroup>

सेवा

<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">

या इस तरह का कुछ।


3
एक Visual Studio प्रोजेक्ट और समाधान फ़ाइल MSBuild फ़ाइलें हैं।
एमीसिको

@AMissico गलत, समाधान फ़ाइलें MSBuild फ़ाइलें नहीं हैं।
जूलियागॉन

हालांकि वे प्रोजेक्ट फ़ाइल प्रारूप (XML) में नहीं हैं, फिर भी वे MSBuild फ़ाइल का समर्थन करते हैं। पर्यावरण चर सेट करें ( set MSBuildEmitSolution=1या संपत्ति तर्क पास करें p:msbuildemitsolution=1) (
AMissico

-4

यदि .xml / .pdb को बिल्ड-एक्शन "सामग्री" (आदि) के रूप में चिह्नित किया जाता है, तो आप उन्हें "कोई नहीं" में बदल सकते हैं। आपको यह भी सुनिश्चित करना चाहिए कि वे कॉपी-टू-बिल्ड-आउटपुट गलत हैं

क्या वो दोनों सेट हैं?


2
लेकिन ऐसा करने के लिए मुझे उन्हें प्रोजेक्ट आइटम के रूप में जोड़ना होगा ... या क्या मैं गलत हूं?
हम्बर्टो

.PDB और .XML कंपाइलर से उत्पन्न फ़ाइलों को कभी भी एक परियोजना में शामिल नहीं किया जाना चाहिए क्योंकि आप पुनरावर्ती बिल्ड त्रुटियों और फ़ाइल लॉकिंग के साथ समाप्त हो जाएंगे।
जेमी हावर्थ

1
@codegecko क्या आपने "कोई नहीं" देखा? उन्हें स्रोत dll के निकट होने की आवश्यकता होती है ताकि वे अंतर्मुखी हो सकें आदि। मुझे इससे कभी कोई समस्या नहीं हुई।
मार्क Gravell

2
@codegecko जिन्होंने बिन के बारे में कुछ कहा? मैं वहां से रेफर नहीं करूंगा ... मैं आमतौर पर dll, XML और pdb के साथ / lib से संदर्भित करता हूं।
मार्क Gravell

1
आआआआआआआअ, अब पन्ना गिरा, मुझे गलतफहमी हुई। उन्हें एक / lib फ़ोल्डर में शामिल करना, VS के अंदर संदर्भित करना, आइटम को एक समाधान फ़ोल्डर में जोड़ना, आउटपुट प्रकार को "कोई नहीं" के रूप में निर्दिष्ट करना - यह था। वास्तव में मेरी खुद की परियोजनाओं पर इसका इस्तेमाल शुरू कर सकते हैं - धन्यवाद!
जेमी हावर्थ

-5

रिलीज बिल्ड पर फ़ोल्डर में XML फ़ाइलों की प्रतिलिपि बनाने में क्या समस्या है? मुझे ऐसा लगता है कि यह ठीक है और वास्तविक समस्या कोड के साथ है जो उन्हें इंस्टॉलर में रखने के लिए फ़ाइलों को उठाती है। अपने स्वयं के बिन \ रिलीज़ फ़ोल्डर से थर्ड पार्टी डीएलएस लेना मेरी राय में एक अच्छा अभ्यास नहीं है। मुझे मेरा इंस्टॉलर अपने सोर्स ट्री में अपने स्वयं के फोल्डर से थर्ड पार्टी dlls लेने होंगे।


2
समस्या यह है कि इन फाइलों का इंटेलीजेंस फीचर की सहायता के अलावा कोई कार्य नहीं है। रिलीज फ़ाइलों के साथ उन्हें शामिल करने का कोई मतलब नहीं है। इसके अलावा, इसमें कोई इंस्टॉलर शामिल नहीं है ...
Humberto

तो आप अपने ऐप को कैसे तैनात कर रहे हैं?
रसेल मैक्लुरे ऑक्ट

3
तो मेरा समाधान कॉपी स्क्रिप्ट को संशोधित करने के लिए होगा उन फ़ाइलों की प्रतिलिपि न करने के लिए जिन्हें आप कॉपी नहीं करना चाहते हैं।
रसेल मैकलर

2
यह सुनिश्चित करने के लिए काम करेगा। लेकिन यह आदर्श समाधान नहीं है, जो फाइलों को बिल्ड में कॉपी होने से रोकेगा। मैं इस व्यवहार के पीछे के तर्क को समझने की कोशिश कर रहा हूं। धन्यवाद!
हम्बर्टो

4
अच्छी लिखित XML प्रलेखन फाइलें बड़ी हैं। प्रत्येक बिल्ड पर उन्हें कॉपी करना मेरे SSD के जीवन काल को छोटा कर रहा है।
बसंत ६76

-5

सेटिंग "बिल्ड" टैब के तहत, "XML दस्तावेज़ीकरण फ़ाइल" को अनचेक करने के लिए सवाल में परियोजना के गुणों में है। यह एक MSBuild संपत्ति भी है जो आपके * .jj फ़ाइल में बिल्ड कॉन्फ़िगरेशन के लिए <DocumentationFile>लागू है <PropertyGroup>


3
यह प्रतिक्रिया गलत है। वह प्री-जेनरेटेड एक्सएमएल फाइलों के बारे में पूछ रहा है जो एक कंट्रोल वेंडर से आती हैं। यदि आप अपनी स्वयं की XML फ़ाइलें उत्पन्न कर रहे हैं तो आपकी प्रतिक्रिया केवल सहायक है।
केविन कालीटोव्स्की

ऐसा लगता है कि आप इसे <PropertyGroup> तत्व में <.csproj फ़ाइल में सेट कर सकते हैं: <AllowedReferenceRelatedFileExtensions> "। Pdb"। = "" </ AllowedReferenceRelatedFileExtensions>
Jay
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.