जवाबों:
बिल्ड एक्शन प्रॉपर्टी पर MSDN आलेख मतभेदों की व्याख्या करता है।
कोई नहीं - फ़ाइल प्रोजेक्ट आउटपुट समूह में शामिल नहीं है और निर्माण प्रक्रिया में संकलित नहीं है। एक उदाहरण एक पाठ फ़ाइल है जिसमें प्रलेखन शामिल है, जैसे रीडमी फ़ाइल।
सामग्री - फ़ाइल संकलित नहीं है, लेकिन सामग्री आउटपुट समूह में शामिल है। उदाहरण के लिए, यह सेटिंग किसी .htm या अन्य प्रकार की वेब फ़ाइल के लिए डिफ़ॉल्ट मान है।
एक अंतर यह है कि वे कैसे प्रकाशित होते हैं; "कोई नहीं" आइटम प्रकाशित में शामिल नहीं होते हैं, "सामग्री" आइटम करते हैं; उदाहरण के लिए, प्रकाशित टैब पर "एप्लिकेशन फ़ाइलें" संवाद पर।
CopyToOutputDirectory
गया है, तो true
इसके सेट के साथ कोई भी नहींdotnet publish
मुझे 100% यकीन नहीं है (मैं बिल्ड एक्शन प्रॉपर्टी का एमएसडीएन विवरण पढ़ता हूं ) लेकिन सिर्फ एमएसडीएन से स्टैकऑवरफ्लो के उस उत्तर की नकल करना मेरे लिए पूरी तरह से सवाल का जवाब नहीं देता है।
कोई नहीं और सामग्री का अंतर केवल वेब परियोजनाओं पर प्रभाव डालता है। कमांड लाइन परियोजना, WinForm परियोजना या यूनिटटेस्ट परियोजना (मेरे मामले में) आदि के लिए कोई भी और सामग्री का कोई अलग व्यवहार नहीं है।
MSDN: "प्रोजेक्ट आउटपुट ग्रुप" या "कंटेंट आउटपुट ग्रुप" केवल वेब प्रोजेक्ट में उपयोग की जाने वाली शर्तें, है ना?
None
बनाम Content
केवल प्रकाशित चरण के लिए प्रभाव है न कि बिल्ड कदम। बिल्ड स्टेप के लिए ऐसा लगता है CopyToOutputDirectory
कि या तो सेट किया जा सकता है और यह नियंत्रित करता है कि फाइल बिल्ड स्टेप द्वारा कॉपी की गई है या नहीं। यह भी अजीब लगता है कि डिफ़ॉल्ट रूप से T4 टेम्प्लेट Content
आइटम के रूप में जोड़े जाते हैं और None
आइटम नहीं ।
मेरी स्थिति में, मेरी MSBuild फाइल में ItemGroup
छवि संसाधनों के लिए थी जो इस प्रकार दिखाई देती थी:
<ItemGroup>
<Content Include="Resources\image001.png" />
<Content Include="Resources\image002.png" />
<Content Include="Resources\image003.png" />
<Content Include="Resources\image004.png" />
<None Include="Resources\image005.png" />
<None Include="Resources\image006.png" />
<None Include="Resources\image007.png" />
</ItemGroup>
जब मेरा प्रोजेक्ट ठीक-ठाक बन रहा था, तो इसने मुझे आश्चर्यचकित कर दिया था कि मेरे पास मेरे Content
और None
आइटम प्रकार तत्वों का मिश्रण क्यों था ItemGroup
। इस MSDN लेख (विजुअल स्टूडियो 2010 के लिए) ने मुझे वह मार्गदर्शन दिया जिसकी मुझे तलाश थी:
ध्यान दें कि जब संसाधन संपादक एक छवि जोड़ता है, तो यह बिल्ड एक्शन को कोई नहीं सेट करता है , क्योंकि .resx फ़ाइल छवि फ़ाइल को संदर्भित करती है। बिल्ड समय पर, छवि को .resx फ़ाइल से बनाई गई .resources फ़ाइल में खींच लिया जाता है। छवि को आसानी से .resx फ़ाइल के लिए जोरदार-टाइप किए गए वर्ग ऑटो-जनरेट के माध्यम से आसानी से एक्सेस किया जा सकता है। इसलिए, आपको इस सेटिंग को एंबेडेड संसाधन में नहीं बदलना चाहिए , क्योंकि ऐसा करने से विधानसभा में दो बार छवि शामिल होगी।
संकल्प: इस मार्गदर्शन के साथ, एक पाठ संपादक का उपयोग करके, मैंने Content
आइटम प्रकार के तत्वों को बदल दिया है None
।
इसके अलावा, MSBuild आइटमों के अवलोकन के लिए, यह MSDN लेख देखें ।
मेरे पास एक ऐसी परियोजना है जिसमें कोई भी संकलित वस्तु नहीं है (यह html और जावास्क्रिप्ट को चमेली इकाई परीक्षणों के लिए संग्रहीत करता है)।
एक दिन मेरे समाधान (जिसमें निहित परियोजना थी) ने यह कहते हुए संकलन बंद कर दिया कि "लक्ष्य" बिल्ड "परियोजना में मौजूद नहीं है"।
मैंने संकलक में लाने के लिए एक आयात जोड़ा, जिसने मेरी मशीन पर ठीक काम किया लेकिन बिल्ड सर्वर पर msbuild का उपयोग करने में विफल रहा।
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
मैंने फिर एक लाइन बदली
<None Include="SpecRunner.html" />
सेवा
<Content Include="SpecRunner.html" />
और यह बिल्ड सर्वर पर भी काम करता था।
आपके द्वारा .vstemplate में परिभाषित फ़ाइलों को शामिल करने के लिए आपको किसी टेम्पलेट प्रोजेक्ट फ़ाइल में कोई भी नहीं चाहिए अन्यथा वे निर्माण और अनुवाद प्रक्रिया में खो जाते हैं। वे अस्थायी फ़ोल्डर में पीछे रह जाते हैं जिसका उपयोग वह सब कुछ बनाने के लिए करता है और फिर कुछ ही समय बाद हटा दिया जाता है।
मेरे मामले में .Pubxml उन फ़ाइलों में से एक है जो किसी भी सूची में नहीं हैं । यह समाधान के निर्माण या वेब परियोजना के लिए एक स्थिर फ़ाइल के रूप में नहीं है। लेकिन साइट को एज़्योर में प्रकाशित करने के लिए, कॉन्फ़िगरेशन इसमें मौजूद हैं।
Microsoft लेख के अनुसार ये प्रमुख प्रकार हैं जिन्हें हम .csproj फ़ाइल टैग के बीच देखते हैं :
कोई नहीं - फ़ाइल प्रोजेक्ट आउटपुट समूह में शामिल नहीं है और निर्माण प्रक्रिया में संकलित नहीं है। एक उदाहरण एक पाठ फ़ाइल है जिसमें प्रलेखन शामिल है, जैसे रीडमी फ़ाइल।
संकलन - फ़ाइल का निर्माण आउटपुट में संकलित किया गया है। इस सेटिंग का उपयोग कोड फ़ाइलों के लिए किया जाता है।
सामग्री - फ़ाइल संकलित नहीं है, लेकिन सामग्री आउटपुट समूह में शामिल है। उदाहरण के लिए, यह सेटिंग किसी .htm या अन्य प्रकार की वेब फ़ाइल के लिए डिफ़ॉल्ट मान है।
एंबेडेड संसाधन - यह फ़ाइल मुख्य प्रोजेक्ट बिल्ड आउटपुट में DLL या निष्पादन योग्य के रूप में एम्बेडेड है। यह आमतौर पर संसाधन फ़ाइलों के लिए उपयोग किया जाता है।
सामग्री फ़ाइलों को एक बिल्ड में शामिल नहीं किया गया है, लेकिन एक प्रकाशित में शामिल किया गया है।
जब तक वे आपके द्वारा उस तरह से कॉन्फ़िगर नहीं किए जाते हैं, तब तक कोई भी फाइल किसी बिल्ड या पब्लिश में शामिल नहीं होती है। उदाहरण के लिए, "ऑलवेज" या "न्यूअर" की "कॉपी टू आउटपुट डायरेक्टरी" सेटिंग, उन्हें निर्माण और प्रकाशन दोनों में शामिल करने का कारण बनेगी।
Content
करने के लिए बदल गया थाNone
एस। मुझे लगता है कि ऐसा तब हुआ जब मैंने रेजर में परिवर्तित होने पर .ascx से .cshtml तक फ़ाइलों का नाम बदला। मैन्युअल रूप से उन्हें बदलने से मेरे पास कुछ तैनाती के मुद्दे तय हो गए। खुशी है कि मैंने यह पाया।