web-dev-qa-db-fra.com

Les fichiers peuvent-ils être imbriqués dans des projets VS2017 Solution Explorer pour .NET Core (non ASP.NET Core)?

Dans les projets MSBuild "à l'ancienne", utilisés par exemple par Windows Forms dans VS2017, les fichiers pouvaient être "imbriqués" via un élément DependentUpon dans le fichier csproj.

J'ai utilisé cela pour regrouper des tests unitaires dans Noda Time, par exemple.

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

Cela a conduit à des tests facilement navigables:

Nested tests

J'ai sciemment "perdu" cette fonctionnalité lorsque je suis passé à project.json pour .NET Core, mais avait espéré qu'il reviendrait lors de la conversion en MSBuild. Cependant, cela ressemble à des projets MSBuild basés sur le Kit de développement .NET Core SDK (élément racine <Project Sdk="Microsoft.NET.Sdk">) ne subit pas le même traitement dans Visual Studio 2017, même si un ItemGroup est ajouté manuellement avec les mêmes éléments que le projet "old school".

Les projets ASP.NET Core reçoivent une imbrication automatique pour les CSS et Javascript minifiés, mais la manière de l'appliquer à C # dans les projets de bibliothèque .NET Core n'est pas claire.

71
Jon Skeet

Je le fais fonctionner dans un de mes projets de style Microsoft.NET.Sdk En utilisant quelque chose de similaire au suivant:

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

Le truc ici consiste à utiliser Update au lieu de Include. En effet, les éléments implicites proviennent d'un fichier d'accessoires importé avant le projet principal. Un Include supplémentaire n'affectera pas les fichiers déjà inclus, mais ils peuvent être modifiés à l'aide de Update.

84
Matthew King

Dans Visual Studio 2019, j'ai un .NET Core 2.2 <Project Sdk="Microsoft.NET.Sdk"> projet dans lequel je voulais les fichiers imbriqués imbriqués appsettings.json/appsettings.Development.json, comme ils le font automatiquement pour <Project Sdk="Microsoft.NET.Sdk.Web"> projets.

Voici ce que je devais ajouter au .CSPROJ:

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

Après cela, je devais décharger/recharger le projet pour que la modification soit prise en compte dans l'Explorateur de solutions. Notez que je configure également ces fichiers pour qu'ils soient toujours copiés dans le répertoire de sortie.

5

Si vous utilisez . Netstandardx.x , vous ne pouvez pas utiliser NestedIn . Ça ne fonctionne pas.

Vous pouvez le faire manuellement dans votre .csproj

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