.NET कोर (गैर-ASP.NET कोर) परियोजनाओं के लिए VS2017 सॉल्यूशन एक्स्प्लोरर में फाइलों को नेस्ट किया जा सकता है?


85

"पुराने स्कूल" MSBuild प्रोजेक्ट्स में - जैसा कि अभी भी VS2017 में विंडोज फॉर्म द्वारा उपयोग किया जाता है - फाइलें DependentUponcsproj फाइल में एक आइटम के माध्यम से "नेस्टेड" हो सकती हैं ।

मैंने इसका उपयोग समूह इकाई परीक्षणों में Noda Time, उदा

<Compile Include="LocalDateTest.PeriodArithmetic.cs">
  <DependentUpon>LocalDateTest.cs</DependentUpon>
</Compile>

जिसके कारण आसानी से नौगम्य परीक्षण किए गए:

नेस्टेड टेस्ट

project.json.NET कोर के लिए जाने पर मैंने जानबूझकर इस सुविधा को "खो दिया" , लेकिन उम्मीद थी कि MSBuild में परिवर्तित होने पर यह वापस आ जाएगी। हालाँकि, ऐसा लगता है कि .NET कोर SDK (रूट एलिमेंट <Project Sdk="Microsoft.NET.Sdk">) पर आधारित MSBuild प्रोजेक्ट्स को Visual Studio 2017 में समान उपचार नहीं मिलता है, भले ItemGroupही इसे "पुराने स्कूल" प्रोजेक्ट के समान तत्वों के साथ मैन्युअल रूप से जोड़ा जाए।

ASP.NET कोर परियोजनाओं को सीएसएस और जावास्क्रिप्ट के लिए स्वचालित घोंसले के शिकार प्राप्त होते हैं, लेकिन यह स्पष्ट नहीं है कि .NET सी लाइब्रेरी प्रोजेक्ट्स में इसे C # पर कैसे लागू किया जाए।

जवाबों:


104

मेरे पास मेरी एक Microsoft.NET.Sdkपरियोजना में काम कर रहा है जो निम्नलिखित के समान है:

<ItemGroup>
  <Compile Update="LocalDateTest.*.cs">
    <DependentUpon>LocalDateTest.cs</DependentUpon>
  </Compile>
</ItemGroup>

यहां ट्रिक के Updateबजाय उपयोग करना है Include। इसका कारण यह है कि निहित आइटम मुख्य परियोजना से पहले आयात होने वाली एक प्रॉपर फ़ाइल से आ रहे हैं। एक अतिरिक्त Includeउन फ़ाइलों को प्रभावित नहीं करेगा जो पहले से ही शामिल हैं, लेकिन उनका उपयोग करके संशोधित किया जा सकता है Update


2
ठीक है, यह विचित्र है - मुझे यकीन है कि मैंने कोशिश की थी, और यह काम नहीं कर रहा था। यह अब है बहुत, बहुत विचित्र। आह - यह "शामिल करें" के बजाय "अपडेट" है।
जॉन स्कीट

1
मुझे मानना ​​चाहिए कि मुझे बिल्कुल यकीन नहीं है कि अपडेट बनाम शामिल करने से फर्क पड़ता है। टूलींग लोगों में से एक को कुछ अतिरिक्त जानकारी प्रदान करना पसंद करेंगे।
मैथ्यू राजा

1
@MatthewKing: मेरा अनुमान है कि यह *.csपहले से ही डिफ़ॉल्ट रूप से शामिल है, और इसलिए कि नेस्टेड तत्व सामग्री को अनदेखा किया गया है।
जॉन स्कीट

1
@JonSkeet, हाँ ... जैसा कि आपने कहा कि यह विचित्र है ... मैंने इसे एक बार किसी अन्य परियोजना में आज़माया और यह काम कर गया। मैं उन कक्षाओं के पीछे परीक्षण घोंसला बनाना चाहता हूं जो वे परीक्षण करते हैं , लेकिन यह सैकड़ों फाइलों के लिए मैन्युअल रूप से करने के लिए पागल होगा ... भले ही मैं इसके लिए एक एक्सटेंशन लिखूं - प्रोजेक्ट फ़ाइल अच्छा नहीं लगेगा। इसलिए मैंने अंततः Microsoft.NET.Sdk.Webकक्षा पुस्तकालयों के लिए भी हमेशा उपयोग करने का फैसला किया । अब मुझे नेस्टिंग को बिल्कुल भी कॉन्फ़िगर नहीं करना है।
पावेल अग्रकोव

1
Ive ने अभी-अभी इसका परीक्षण किया है और आपको फ़ाइल के गुणों के आधार पर उसी BuildAction नाम का उपयोग करने की आवश्यकता है जैसे 'संकलन' को 'सामग्री' या 'कोई नहीं' के साथ बदलें। मेरे मामले में यह 'सामग्री' थी
SM3RKY

10

विजुअल स्टूडियो 2019 में, मेरे पास .NET कोर 2.2 <Project Sdk="Microsoft.NET.Sdk">परियोजना है, जिसमें मैं अच्छी तरह से नेस्टेड appsettings.json / appsettings.Development.json फ़ाइलों को चाहता था, जैसे वे <Project Sdk="Microsoft.NET.Sdk.Web">परियोजनाओं के लिए स्वचालित रूप से करते हैं।

यहाँ मुझे .CSPROJ में जोड़ना है:

  <ItemGroup>
    <Content Include="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Include="appsettings.Development.json">
      <DependentUpon>appsettings.json</DependentUpon>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

उसके बाद, मुझे समाधान एक्सप्लोरर में प्रभावी होने के लिए परियोजना को उतारना / फिर से लोड करना पड़ा। ध्यान दें कि मैंने इन फ़ाइलों को हमेशा आउटपुट निर्देशिका में कॉपी करने के लिए सेट किया है।


6

आप हाथ से क्राफ्टिंग प्रत्येक प्रविष्टि के बजाय यह वाइल्डकार्ड, आपके लिए इन पंक्तियों को जोड़ने चाहते हैं .csproj फ़ाइल का मतलब है ऐसा कुछ Foo.tests.cs स्वतः अंतर्गत नेस्टेड हो जाता है Foo.cs

.NET कोर 3.1.0 के साथ VS2019 में परीक्षण और काम कर रहा है

  <ItemGroup>
    <Compile Update="**\*.tests.cs">
      <DependentUpon>$([System.String]::Copy(%(Filename)).Replace(".tests",".cs"))</DependentUpon>
    </Compile>
  </ItemGroup>

2

आप का उपयोग कर .netstandardx.x आप उपयोग नहीं कर सकते NestedIn । यह काम नहीं कर रहा है।

आप इसे अपने .csproj में मैन्युअल रूप से कर सकते हैं

<ItemGroup><Compile Include="BaseClass">ChildClass.cs</Compile></ItemGroup>

-6

यदि आप एक ही उपसर्ग का उपयोग करते हैं तो यह फाइलों को स्वतः ही घोंसला बना लेगा।

उदाहरण:

AsemblyInfo.cs 
AsemblyInfo.local.cs

1
सवाल .NET Core को लेकर था। क्या आप अपना संदेह स्पष्ट कर सकते हैं?
मिगुएल डोमिंग्यूज

2
क्या आपने इसे VS2017 में आज़माया है? मेरे पास अभी एक समाधान खुला है जिसमें .NetFramework 4.7.1, Core 2.0 और Standard 2.1 है। मैंने प्रत्येक प्रकार की परियोजना में एक Class.cs और उसके बाद एक Class.local.cs जोड़ने का प्रयास किया। कोई स्वचालित घोंसला नहीं। मैनुअल नेस्टिंग ठीक काम करती है। वीएस २०१.7 (१५.201.४)
एंड्रयू स्टिट्ज

विजुअल स्टूडियो 2017 15.9.3: एक ही उपसर्ग के साथ फाइलें सोल्यूशन एक्सप्लोरर में स्वचालित रूप से नेस्टेड हो रही हैं
brsfan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.