विजुअल स्टूडियो प्रोजेक्ट संपत्तियों में विभिन्न "बिल्ड एक्शन" सेटिंग्स क्या हैं और वे क्या करते हैं?


844

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

जवाबों:


1015
  • कोई नहीं : फ़ाइल प्रोजेक्ट आउटपुट समूह में शामिल नहीं है और निर्माण प्रक्रिया में संकलित नहीं है। एक उदाहरण एक पाठ फ़ाइल है जिसमें प्रलेखन शामिल है, जैसे रीडमी फ़ाइल।

  • संकलन : फ़ाइल का निर्माण आउटपुट में संकलित किया गया है। इस सेटिंग का उपयोग कोड फ़ाइलों के लिए किया जाता है।

  • सामग्री : आपको एक फ़ाइल (असेंबली के समान निर्देशिका में) को एक स्ट्रीम के रूप में पुनः प्राप्त करने की अनुमति देता है। Application.GetContentStream (URI) के माध्यम से। काम करने के लिए इस विधि के लिए, यह जो दृश्य स्टूडियो कृपा कहते हैं जब आप "सामग्री" के रूप में एक फ़ाइल को चिह्नित एक AssemblyAssociatedContentFile कस्टम विशेषता की जरूरत है

  • एंबेडेड संसाधन : एक्सक्लूसिव असेंबली मैनिफ़ेस्ट रिसोर्स में फ़ाइल को एम्बेड करता है।

  • संसाधन (केवल WPF) : किसी साझा में फाइल को असेंबली करता है (असेंबली में सभी फाइलों को समान सेटिंग के साथ) असेंबली मैनिफ़ेस्ट रिसोर्स जिसका नाम AppName.g.resources है।

  • पृष्ठ (केवल WPF) : किसी xamlफ़ाइल को संकलित करने के लिए प्रयुक्त bamlbamlतब के रूप में ही तकनीक के साथ एम्बेडेड है Resource(यानी `AppName.g.resources के रूप में उपलब्ध)

  • ApplicationDefinition (केवल WPF) : XAML / वर्ग फ़ाइल को चिह्नित करें जो आपके एप्लिकेशन को परिभाषित करता है। आप x के साथ कोड-पीछे निर्दिष्ट करते हैं: क्लास = "Namespace.ClassName" और स्टार्टअप फॉर्म / पेज को स्टार्टअपअप्री = "Window1.xaml" के साथ सेट करें

  • स्प्लैशस्क्रीन (केवल WPF) : एक ऐसी छवि जो के रूप में चिह्नित की गई है , जब एक WPF एप्लिकेशन लोड होता है, तो स्वचालित रूप से दिखाया जाता SplashScreen है और फिर फ़ेड हो जाता है

  • DesignData : XAML व्यूअमॉडल को संकलित करता है ताकि विजुअल स्टूडियो में उपयोगकर्ता डेटा के साथ यूज़र कॉन्ट्रॉल्स का पूर्वावलोकन किया जा सके (मॉक प्रकारों का उपयोग करता है)

  • DesignDataWithDesignTimeCreatableTypes : XAML viewmodels को कंपाइल करता है, ताकि विजुअल स्टूडियो में यूज़रकंट्रोल को नमूना डेटा के साथ पूर्वावलोकन किया जा सके (वास्तविक प्रकारों का उपयोग करता है)

  • EntityDeploy : (एंटिटी फ्रेमवर्क) : एंटिटी फ्रेमवर्क कलाकृतियों को तैनात करने के लिए उपयोग किया जाता है

  • कोडएनालिसिस कोड : वर्तनी नियमों के लिए कस्टम शब्द शब्दकोश वाली XML फ़ाइल


9
" डिज़ाइनडेटा " का उपयोग " ब्लेंडेबिलिटी " के लिए किया जाता है, जिससे आप WPF मार्क-अप आधारित डेटा जोड़ सकते हैं, जो कि, जब सही सेटिंग्स लागू होती हैं, तब डिज़ाइन टाइम पर दिखाया जाता है।
पीजीअल्लाघर

6
यह भी ध्यान दें कि एक-क्लिक की तैनाती का उपयोग करते समय सामग्री को शामिल किया जाएगा, लेकिन कोई भी "नई प्रति" चयनित होने पर भी कॉपी नहीं करेगा।
डेक्स फ़ोहल

4
फ़ेक, कोडएनालिसिस और XamlAppRef के बारे में क्या?
क्रोनो

1
@jxramos यह जानकारी प्रोजेक्ट फ़ाइल में सहेजी गई है।
टोबियास

18
किस बारे में AdditionalFiles? मैं इसे वीएस 2015 में देखता हूं लेकिन इसके लिए संदर्भ नहीं मिला।
होलिस्टिक डेवलपर

111

प्रलेखन से:

BuildAction गुण इंगित करता है कि जब किसी बिल्ड निष्पादित होता है, तो Visual Studio फ़ाइल के साथ क्या करता है। BuildAction में कई मान हो सकते हैं:

कोई नहीं - फ़ाइल प्रोजेक्ट आउटपुट समूह में शामिल नहीं है और निर्माण प्रक्रिया में संकलित नहीं है। एक उदाहरण एक पाठ फ़ाइल है जिसमें प्रलेखन शामिल है, जैसे रीडमी फ़ाइल।

संकलन - फ़ाइल का निर्माण आउटपुट में संकलित किया गया है। इस सेटिंग का उपयोग कोड फ़ाइलों के लिए किया जाता है।

सामग्री - फ़ाइल संकलित नहीं है, लेकिन सामग्री आउटपुट समूह में शामिल है। उदाहरण के लिए, यह सेटिंग किसी .htm या अन्य प्रकार की वेब फ़ाइल के लिए डिफ़ॉल्ट मान है।

एंबेडेड संसाधन - यह फ़ाइल मुख्य प्रोजेक्ट बिल्ड आउटपुट में DLL या निष्पादन योग्य के रूप में एम्बेडेड है। यह आमतौर पर संसाधन फ़ाइलों के लिए उपयोग किया जाता है।


1
दिलचस्प! मैंने VS2008 स्थापित किया है, मुझे आश्चर्य है कि वे मेरे प्रलेखन में क्यों नहीं दिखाई दिए?
पॉल बाटम

पीआरआई संसाधन के बारे में क्या?
यवर

1
@PaBBatum क्या आप इस उद्धृत परिभाषा के लिए संदर्भ सम्मिलित कर सकते हैं?
राजन प्रसाद

@ रेमंड 232: क्या उद्धृत परिभाषा?
पीटर मोर्टेंसन

1
@PaBBatum: हाँ वास्तव में संदर्भ अच्छा होगा। जवाब "प्रलेखन से" शुरू होता है इसलिए इस प्रलेखन की एक कड़ी की सराहना की जाएगी।
मार्क

35

पृष्ठ - निर्दिष्ट XAML फ़ाइल लेता है, और BAML में संकलित करता है, और उस आउटपुट को आपके असेंबली (विशेष रूप से असेंबलीName.g.resource) के लिए प्रबंधित संसाधन स्ट्रीम में एम्बेड करता है, साथ ही, यदि आपके पास रूट XLL तत्व में उपयुक्त विशेषताएँ हैं फ़ाइल, यह एक blah.g.cs फ़ाइल बनाएगा, जिसमें उस पृष्ठ के लिए "कोडबिहिन" का एक आंशिक वर्ग होगा; इसमें मूल रूप से फ़ाइल में मेमोरी को फिर से हाइड करने के लिए BAML goop पर कॉल करना और अपनी कक्षा के किसी भी सदस्य चर को अब बनाई गई वस्तुओं में सेट करना है (जैसे यदि आप x डालते हैं: Name = "foo" किसी आइटम पर , आप ऐसा करने में सक्षम होंगे। Foo.Background = बैंगनी; या इसी तरह।

ApplicationDefinition - पेज के समान, इसके अलावा यह सबसे आगे जाता है, और आपके एप्लिकेशन के लिए प्रविष्टि बिंदु को परिभाषित करता है जो आपके ऐप ऑब्जेक्ट को तुरंत करेगा, उस पर कॉल कॉल करेगा, जो तब StartupUri प्रॉपर्टी द्वारा सेट किए गए प्रकार को तुरंत करेगा, और आपका मेनविंडो देगा ।

इसके अलावा, स्पष्ट होने के लिए, यह प्रश्न कुल मिलाकर परिणाम सेट में संक्रमित है; MSBuild टास्क के निर्माण से कोई भी अतिरिक्त BuildActions को परिभाषित कर सकता है। यदि आप% systemroot% \ Microsoft.net \ फ्रेमवर्क \ v {संस्करण} \ निर्देशिका में देखते हैं, और Microsoft.Common.targets फ़ाइल को देखते हैं, तो आपको कई और अधिक (उदाहरण वीएस प्रो और ऊपर के साथ) को समझने में सक्षम होना चाहिए, एक "शैडो" क्रिया है जो आपको निजी कक्षाओं का परीक्षण करने में मदद करने के लिए निजी एक्सेसर्स उत्पन्न करती है।


मुझे आशा है कि आपको इस बात से कोई आपत्ति नहीं है कि मैंने आपके उत्तर के कुछ हिस्सों को गिशु के उत्तर में कॉपी कर दिया है, ताकि अधिक संपूर्ण संदर्भ उत्तर मिल सके।
इयान बॉयड

32

VS2010 में 'बिल्ड एक्शन' के लिए एक संपत्ति है, और 'कॉपी टू आउटपुट डायरेक्टरी' के लिए भी। तो 'कोई नहीं' की एक कार्रवाई अभी भी बिल्ड डायरेक्टरी को कॉपी करेगी यदि कॉपी प्रॉपर्टी 'कॉपी' के लिए सेट है तो नया 'या' ऑलवेज ऑलवेज '।

इसलिए 'Content' की एक एक्शन एक्शन सामग्री को इंगित करने के लिए आरक्षित होना चाहिए जिसे आप 'Application.GetContentStream' के माध्यम से एक्सेस करेंगे।

मैंने कुछ भी बाहरी रूप से जुड़े हुए .config के लिए 'कोई नहीं' की 'बिल्ड एक्शन' सेटिंग का इस्तेमाल किया और 'कॉपी टू आउटपुट अगर न्यूयर' की 'कॉपी टू आउटपुट' का इस्तेमाल किया।

जी


इसके लिए धन्यवाद। हालाँकि मैं थोड़ा उलझन में हूँ कि मैं यह कैसे / कहाँ करता हूँ। आदर्श रूप से मैं सिर्फ "मेरे" अपलोड "फ़ोल्डर" को शामिल करना चाहूंगा, और सभी बाल फाइलें प्रकाशन में शामिल की जाएंगी।
समजौली

यह ऑब्जेक्ट एक्सप्लोरर में एक व्यक्तिगत आइटम के गुणों पर लागू होता है, जिसे आप किसी आइटम का चयन करते समय या राइट क्लिक और गुणों का चयन करते हुए गुण टैब में देखेंगे। आप जो चाहते हैं, मुझे लगता है कि आपको प्रोजेक्ट को राइट क्लिक करने पर ही मौजूदा आइटम जोड़ना होगा। BTW, मौजूदा आइटम डायलॉग के सेव बटन में एक ड्रॉप डाउन है जो आपको इसे एक लिंक के रूप में जोड़ने की अनुमति देता है। आपको अभी भी फ़ोल्डर में आइटम जोड़ना पड़ सकता है।
जेरार्ड ओनेइल

5

VS2008 में, सबसे उपयोगी लगता है कि डॉक्टर प्रविष्टि है:

विंडोज प्रेजेंटेशन फाउंडेशन एक WPF एप्लीकेशन (WPF) का निर्माण

एमएस-सहायता: //MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinition पहचानता XAML मार्कअप फ़ाइल है कि आवेदन परिभाषा (एक XAML मार्कअप फ़ाइल जिसका मूल तत्व है आवेदन) शामिल हैं। ApplicationDefinition अनिवार्य है जब Install true हो और OutputType वाइनएक्स हो। एक WPF आवेदन और, परिणामस्वरूप, एक MSBuild प्रोजेक्ट में केवल एक ApplicationDefinition हो सकता है।

पृष्ठ एक XAML मार्कअप फ़ाइल को पहचानता है जिसकी सामग्री द्विआधारी प्रारूप में परिवर्तित हो जाती है और एक विधानसभा में संकलित की जाती है। पृष्ठ वस्तुएँ आम तौर पर कोड-पीछे वर्ग के साथ संयोजन के रूप में लागू किया जाता है।

सबसे सामान्य पृष्ठ आइटम XAML फ़ाइलें हैं जिनके शीर्ष-स्तरीय तत्व निम्नलिखित में से एक हैं:

Window (System.Windows..::.Window).

Page (System.Windows.Controls..::.Page).

PageFunction (System.Windows.Navigation..::.PageFunction<(Of <(T>)>)).

ResourceDictionary (System.Windows..::.ResourceDictionary).

FlowDocument (System.Windows.Documents..::.FlowDocument).

UserControl (System.Windows.Controls..::.UserControl).

संसाधन एक संसाधन फ़ाइल की पहचान करता है जिसे एक एप्लीकेशन असेंबली में संकलित किया जाता है। जैसा कि पहले उल्लेख किया गया है, UICulture संसाधन आइटम संसाधित करता है।

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


4

Microsoft से इस पृष्ठ के बारे में कैसे कनेक्ट करें (DesignData और DesignDataWithDesignTimeCreatableTypes टाइप करके)। का हवाला देते हुए:

निम्न नमूना डेटा फ़ाइलों के लिए दो बिल्ड क्रियाएँ का वर्णन करता है।

नमूना डेटा .xaml फ़ाइलों को नीचे दिए गए कार्यों में से एक को सौंपा जाना चाहिए:

DesignData : नमूना डेटा प्रकारों को अशुद्ध प्रकारों के रूप में बनाया जाएगा। इस बिल्ड एक्शन का उपयोग तब करें जब नमूना डेटा प्रकार सृजनात्मक न हों या आपके पास केवल पढ़ने के लिए ऐसे गुण हों, जिनके लिए आप नमूना डेटा मान निर्धारित करना चाहते हैं।

DesignDataWithDesignTimeCreatableTypes : नमूना डेटा प्रकार नमूना डेटा फ़ाइल में परिभाषित प्रकारों का उपयोग करके बनाया जाएगा। इस बिल्ड एक्शन का उपयोग तब करें जब नमूना डेटा प्रकार उनके डिफ़ॉल्ट खाली कंस्ट्रक्टर का उपयोग करने योग्य हों।

इतना अविश्वसनीय रूप से संपूर्ण नहीं है , लेकिन यह कम से कम एक संकेत देता है। यह MSDN वॉकथ्रू कुछ विचार भी देता है। मुझे नहीं पता कि ये बिल्ड एक्ट गैर-सिल्वरलाइट प्रोजेक्ट के लिए भी लागू हैं या नहीं।


4
  • फ़ेक: माइक्रोसॉफ्ट फ़ेक (यूनिट टेस्ट आइसोलेशन) फ्रेमवर्क का हिस्सा। सभी विज़ुअल स्टूडियो संस्करणों पर उपलब्ध नहीं है। आपके प्रोजेक्ट में यूनिट टेस्टिंग को सपोर्ट करने के लिए फेक का उपयोग किया जाता है, जिससे आप एप्लिकेशन के अन्य भागों को स्टब्स या शिम के साथ बदल कर कोड को अलग कर सकते हैं। यहाँ और अधिक: https://msdn.microsoft.com/en-us/library/hh549175.aspx
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.