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:
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.
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
.
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.
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>