Dosyalar, .NET Core (ASP.NET Core dışı) projeleri için VS2017 Solution Explorer'da yuvalanabilir mi?


86

"Eski okul" MSBuild projelerinde - örneğin hala VS2017'de Windows Forms tarafından kullanıldığı gibi - dosyalar DependentUponcsproj dosyasındaki bir öğe aracılığıyla "iç içe" olabilir .

Bunu, Noda Time'da birim testlerini birlikte gruplamak için kullandım, ör.

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

Bu, kolayca gezilebilir testlere yol açtı:

İç içe testler

project.json.NET Core'a geçerken bilerek bu özelliği "kaybettim" , ancak MSBuild'e dönüştürürken geri döneceğini ummuştum. Ancak, .NET Core SDK (kök öğe <Project Sdk="Microsoft.NET.Sdk">) tabanlı MSBuild projeleri ItemGroup, "eski okul" projesiyle aynı öğelerle manuel olarak eklenmiş olsa bile, Visual Studio 2017'de aynı muameleyi almıyor gibi görünüyor .

ASP.NET Core projeleri, küçültülmüş CSS ve Javascript için otomatik yuvalama alır, ancak bunun .NET Core kitaplık projelerinde C # 'a nasıl uygulanacağı açık değildir.

Yanıtlar:


106

Microsoft.NET.SdkAşağıdakine benzer bir şey kullanarak onu- tarzı projelerimden birinde çalıştırıyorum :

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

Buradaki hile Updateyerine kullanmaktır Include. Bunun nedeni, örtük öğelerin ana projeden önce içe aktarılan bir props dosyasından gelmesidir. Bir ek Include, zaten dahil edilen dosyaları etkilemez, ancak kullanılarak değiştirilebilir Update.


2
Tamam, bu tuhaf - eminim bunu denedim ve işe yaramadı. Şimdi öyle. Çok, çok tuhaf. Ah - "Dahil Et" yerine "Güncelle" dir.
Jon Skeet

1
Dahil Et ve Güncellemenin neden fark yarattığından tam olarak emin olmadığımı itiraf etmeliyim. Takım arkadaşlarından birinin ek bilgi sağlamasını isterim.
Matthew King

2
@MatthewKing: Benim tahminim bunun nedeni *.csvarsayılan olarak zaten dahil edilmiş olması ve bu nedenle iç içe geçmiş eleman içeriğinin yok sayılmasıdır.
Jon Skeet

1
@JonSkeet, evet ... dediğin gibi tuhaf ... Başka bir projede bir kez daha denedim ve işe yaradı. Testleri test ettikleri sınıfların arkasına yerleştirmek istiyorum , ancak yüzlerce dosyayı manuel olarak yapmak çılgınca olurdu ... Bunun için bir uzantı yazsam bile - proje dosyası iyi görünmeyecek. Sonunda Microsoft.NET.Sdk.Websınıf kitaplıkları için bile kullanmaya karar verdim . Artık yuvayı yapılandırmam gerekmiyor.
Pavel Agarkov

1
Bunu az önce test ettim ve aynı BuildAction adını kullanmanız gerekiyor, örneğin dosya özelliklerinize bağlı olarak "Derleme" yi "İçerik" veya "Yok" ile değiştirin. Benim durumumda 'İçerik'ti
SM3RKY

11

Visual Studio 2019'da, <Project Sdk="Microsoft.NET.Sdk">tıpkı <Project Sdk="Microsoft.NET.Sdk.Web">projeler için otomatik olarak yaptıkları gibi güzelce yerleştirilmiş appsettings.json / appsettings.Development.json dosyalarını istediğim bir .NET Core 2.2 projem var .

.CSPROJ'a eklemem gerekenler:

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

Bundan sonra, değişikliğin Çözüm Gezgini'nde geçerli olması için projeyi kaldırmam / yeniden yüklemem gerekti. Ayrıca bu dosyaları her zaman çıktı dizinine kopyalanacak şekilde ayarladığımı unutmayın.


6

Her girişi el yapımı yapmak yerine joker karakter olarak kullanmak istiyorsanız, bu satırları .csproj dosyanıza eklemek, Foo.tests.cs gibi her şeyin otomatik olarak Foo.cs altında yuvalanacağı anlamına gelir.

VS2019'da .NET Core 3.1.0 ile test edildi ve çalışıyor

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

2

Eğer kullanılıyorsa .netstandardx.x sen kullanamazsınız NestedIn . Çalışmıyor.

Bunu .csproj dosyanızda manuel olarak yapabilirsiniz.

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

-6

Aynı öneki kullanırsanız, dosyaları otomatik olarak iç içe yerleştirir.

Misal:

AsemblyInfo.cs 
AsemblyInfo.local.cs

1
Soru .NET Core hakkındaydı. Şüphenizi açıklayabilir misiniz?
Miguel Domingues

2
VS2017'de denediniz mi? Şu anda .NetFramework 4.7.1, Core 2.0 ve Standard 2.1'e sahip açık bir çözümüm var. Her türden bir projeye Class.cs ve ardından Class.local.cs eklemeyi denedim. Otomatik yerleştirme yok. Manuel yerleştirme iyi çalışıyor. VS2017 (15.7.4)
Andrew

Visual Studio 2017 15.9.3: Aynı öneke sahip dosyalar otomatik olarak Çözüm Gezgini'ne yerleştiriliyor
brsfan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.