2009-06-29 9 views
81

कैसेएक .csproj फ़ाइल में, <None शामिल = "..."> के लिए क्या है?

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

से

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

अलग है?

+28

मोनोऑक्साइड, मुझे लगता है कि आपने अपने प्रश्न का उत्तर दिया: जिज्ञासा से बाहर। –

+6

मेरे पास कुछ 'सामग्री' को 'none' में बदल दिया गया था। मुझे लगता है कि यह तब हुआ जब मैंने रेजर में कनवर्ट करते समय .ascx से .cshtml तक फ़ाइलों का नाम बदल दिया। उन्हें वापस बदलकर मैन्युअल रूप से कुछ तैनाती के मुद्दों को ठीक कर दिया गया था। खुशी है मैंने यह पाया। – Chris

+7

@ मैथ्यूशर्लेली मैं वास्तव में चाहता हूं कि आप टिप्पणियों को कम कर सकें, क्योंकि मैं तुम्हारा कम कर दूंगा। वह अपने .csproj फ़ाइलों को संपादित क्यों नहीं करना चाहिए ?? – Jez

उत्तर

88

build action संपत्ति पर एमएसडीएन लेख अंतर को बताता है।

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

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

+4

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

20

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

10

मैं कर रहा हूँ नहीं 100% यकीन है कि StackOverflow के लिए, लेकिन सिर्फ MSDN से है कि इसका जवाब को कॉपी (मैं के बिल्ड कार्रवाई संपत्ति MSDN विवरण पढ़) प्रश्न मेरे लिए पूरी तरह से उत्तर नहीं देता।

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

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

+1

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

1

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

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

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

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

मैं तो

<Content Include="SpecRunner.html" /> 

को

<None Include="SpecRunner.html" /> 

से एक लाइन बदल गया और यह रूप में अच्छी तरह बिल्ड सर्वर पर काम किया।

1

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

5

मेरी स्थिति में, मेरा 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 article (के लिए दृश्य स्टूडियो 2010) मेरे मार्गदर्शन मैं खोज रहा था दिया:

ध्यान दें कि जब संसाधन संपादक एक छवि कहते हैं, यह बिल्ड कार्रवाईकोई नहीं करने के लिए सेट है, क्योंकि .resx फ़ाइल छवि फ़ाइल का संदर्भ देता है। बिल्ड समय पर, छवि को .resx फ़ाइल में से बनाए गए .resources फ़ाइल में खींचा जाता है। छवि को आसानी से तक पहुंचाया जा सकता है जो .resx फ़ाइल के लिए मजबूती से टाइप की गई श्रेणी ऑटो-जेनरेट की गई है। इसलिए, आपको इस सेटिंग को एंबेडेड संसाधन पर नहीं बदला जाना चाहिए, क्योंकि ऐसा करने से छवि को असेंबली में दो बार शामिल किया जाएगा।

समाधान: इस मार्गदर्शन के साथ, एक पाठ संपादक का उपयोग, मैं None को Content आइटम प्रकार के तत्वों बदल दिया है।

इसके अलावा, एमएसबिल्ड वस्तुओं के एक सिंहावलोकन के लिए, यह MSDN article देखें।

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