.Csproj फ़ाइल में, <कोई भी शामिल नहीं है = "..."> के लिए?


137

कैसे

<None Include="C:\foo.bar" />

से अलग

<Content Include="C:\foo.bar" />

?


7
मैं कुछ Contentकरने के लिए बदल गया था Noneएस। मुझे लगता है कि ऐसा तब हुआ जब मैंने रेजर में परिवर्तित होने पर .ascx से .cshtml तक फ़ाइलों का नाम बदला। मैन्युअल रूप से उन्हें बदलने से मेरे पास कुछ तैनाती के मुद्दे तय हो गए। खुशी है कि मैंने यह पाया।
क्रिस

जवाबों:


135

बिल्ड एक्शन प्रॉपर्टी पर MSDN आलेख मतभेदों की व्याख्या करता है।

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

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


5
धन्यवाद, मुझे इस संदर्भ का पता लगाने में परेशानी हुई।
Emmett

सहायक है, लेकिन फ़ाइल में आउटपुट में शामिल नहीं करने के लिए "सब कुछ" क्यों नहीं है? क्या बात है?
जिमएच ४४

1
@ JimH44 <कोई नहीं> आइटम अक्सर आउटपुट निर्देशिका में फ़ाइलों की प्रतिलिपि बनाने के लिए उपयोग किए जाते हैं, भले ही वे डिफ़ॉल्ट रूप से आउटपुट समूह में नहीं हैं । यदि आप एक <none> फ़ाइल के लिए "कॉपी टू आउटपुट डायरेक्टरी" -> "कॉपी ऑलवेज" का चयन करते हैं, तो यह कॉपी होने का कारण होगा, और आप देखेंगे कि प्रोजेक्ट की .csproj फ़ाइल में जोड़ी गई प्रविष्टि में <<कोई नहीं> प्रविष्टि होगी। फ़ाइल के लिए।
सुविचारित संकलक

3
तो फिर "कॉपी आउटपुट आउटपुट के लिए" के साथ एक <none> फ़ाइल के बीच अंतर क्या है -> "हमेशा कॉपी करें" और "आउटपुट निर्देशिका में प्रतिलिपि" के साथ एक <सामग्री> फ़ाइल -> "हमेशा कॉपी करें"?
हैशटेबल

30

एक अंतर यह है कि वे कैसे प्रकाशित होते हैं; "कोई नहीं" आइटम प्रकाशित में शामिल नहीं होते हैं, "सामग्री" आइटम करते हैं; उदाहरण के लिए, प्रकाशित टैब पर "एप्लिकेशन फ़ाइलें" संवाद पर।


8
सच नहीं। कम से कम नई डॉट नेट क्ली में। यदि आपके पास कोई आइटम घोषित किया CopyToOutputDirectoryगया है, तो trueइसके सेट के साथ कोई भी नहींdotnet publish
डिस्कॉल्सर

13

मुझे 100% यकीन नहीं है (मैं बिल्ड एक्शन प्रॉपर्टी का एमएसडीएन विवरण पढ़ता हूं ) लेकिन सिर्फ एमएसडीएन से स्टैकऑवरफ्लो के उस उत्तर की नकल करना मेरे लिए पूरी तरह से सवाल का जवाब नहीं देता है।

कोई नहीं और सामग्री का अंतर केवल वेब परियोजनाओं पर प्रभाव डालता है। कमांड लाइन परियोजना, WinForm परियोजना या यूनिटटेस्ट परियोजना (मेरे मामले में) आदि के लिए कोई भी और सामग्री का कोई अलग व्यवहार नहीं है।

MSDN: "प्रोजेक्ट आउटपुट ग्रुप" या "कंटेंट आउटपुट ग्रुप" केवल वेब प्रोजेक्ट में उपयोग की जाने वाली शर्तें, है ना?


2
जैसा कि आप कहते हैं, लगता है कि Noneबनाम Contentकेवल प्रकाशित चरण के लिए प्रभाव है न कि बिल्ड कदम। बिल्ड स्टेप के लिए ऐसा लगता है CopyToOutputDirectoryकि या तो सेट किया जा सकता है और यह नियंत्रित करता है कि फाइल बिल्ड स्टेप द्वारा कॉपी की गई है या नहीं। यह भी अजीब लगता है कि डिफ़ॉल्ट रूप से T4 टेम्प्लेट Contentआइटम के रूप में जोड़े जाते हैं और Noneआइटम नहीं ।
क्रिस्टोफर किंग

8

मेरी स्थिति में, मेरी 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 लेख देखें


3

मेरे पास एक ऐसी परियोजना है जिसमें कोई भी संकलित वस्तु नहीं है (यह html और जावास्क्रिप्ट को चमेली इकाई परीक्षणों के लिए संग्रहीत करता है)।

एक दिन मेरे समाधान (जिसमें निहित परियोजना थी) ने यह कहते हुए संकलन बंद कर दिया कि "लक्ष्य" बिल्ड "परियोजना में मौजूद नहीं है"।

मैंने संकलक में लाने के लिए एक आयात जोड़ा, जिसने मेरी मशीन पर ठीक काम किया लेकिन बिल्ड सर्वर पर msbuild का उपयोग करने में विफल रहा।

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

मैंने फिर एक लाइन बदली

<None Include="SpecRunner.html" />

सेवा

<Content Include="SpecRunner.html" />

और यह बिल्ड सर्वर पर भी काम करता था।


2

आपके द्वारा .vstemplate में परिभाषित फ़ाइलों को शामिल करने के लिए आपको किसी टेम्पलेट प्रोजेक्ट फ़ाइल में कोई भी नहीं चाहिए अन्यथा वे निर्माण और अनुवाद प्रक्रिया में खो जाते हैं। वे अस्थायी फ़ोल्डर में पीछे रह जाते हैं जिसका उपयोग वह सब कुछ बनाने के लिए करता है और फिर कुछ ही समय बाद हटा दिया जाता है।


1

मेरे मामले में .Pubxml उन फ़ाइलों में से एक है जो किसी भी सूची में नहीं हैं । यह समाधान के निर्माण या वेब परियोजना के लिए एक स्थिर फ़ाइल के रूप में नहीं है। लेकिन साइट को एज़्योर में प्रकाशित करने के लिए, कॉन्फ़िगरेशन इसमें मौजूद हैं।

Microsoft लेख के अनुसार ये प्रमुख प्रकार हैं जिन्हें हम .csproj फ़ाइल टैग के बीच देखते हैं :

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

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

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

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


1
कृपया यहाँ टिप्पणी करें, अगर कुछ भ्रामक है या स्पष्ट नहीं है, तो बस एक डाउन वोट मुझे इसे बेहतर बनाने में मदद नहीं करता है। अग्रिम में धन्यवाद।
krishna kant

1
मुझे अक्सर त्रुटि मिली: "गुण" PublishProfiles \ FolderProfile.pubxml "के लिए" कोई भी "तत्व नाम" सामग्री "नहीं होना चाहिए।" बांस पर मेरे Asp.Net परियोजना में, और कभी-कभी निर्माण को फिर से ठीक कर सकते हैं, इसलिए यह नहीं जानते कि वास्तव में समस्या क्या है
Bochen Lin

Hi @BochenLin, आपके द्वारा यहां बताए गए विवरण थोड़े डरावने हैं, क्या आप यहां अधिक विवरण देने का प्रयास कर सकते हैं या यदि संभव हो तो पूरे मुद्दे के विवरण और स्क्रीनशॉट के साथ एक नया प्रश्न पोस्ट करें [और फिर यहां प्रश्न लिंक साझा करें]।
कृष्णा कंठ

0

सामग्री फ़ाइलों को एक बिल्ड में शामिल नहीं किया गया है, लेकिन एक प्रकाशित में शामिल किया गया है।

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

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