Em projetos MSBuild da "velha escola" - como ainda usado pelo Windows Forms no VS2017, por exemplo - os arquivos podem ser "aninhados" por meio de um DependentUpon
item no arquivo csproj.
Usei isso para agrupar testes de unidade no Horário de Noda, por exemplo
<Compile Include="LocalDateTest.PeriodArithmetic.cs">
<DependentUpon>LocalDateTest.cs</DependentUpon>
</Compile>
Isso levou a testes de fácil navegação:
Eu conscientemente "perdi" esse recurso ao mudar project.json
para o .NET Core, mas esperava que ele retornasse ao converter para o MSBuild. No entanto, parece que os projetos MSBuild baseados no .NET Core SDK (elemento raiz <Project Sdk="Microsoft.NET.Sdk">
) não recebem o mesmo tratamento no Visual Studio 2017, mesmo se umItemGroup
for adicionado manualmente com os mesmos elementos do projeto "old school".
Projetos ASP.NET Core recebem aninhamento automático para CSS e Javascript minimizados, mas não está claro como aplicar isso ao C # em projetos de biblioteca do .NET Core.
fonte
*.cs
já está incluído por padrão e que o conteúdo do elemento aninhado é, portanto, ignorado.Microsoft.NET.Sdk.Web
até mesmo para bibliotecas de classe. Agora não preciso configurar o aninhamento.No Visual Studio 2019, tenho um
<Project Sdk="Microsoft.NET.Sdk">
projeto .NET Core 2.2 no qual queria os arquivos appsettings.json / appsettings.Development.json bem aninhados, assim como eles fazem automaticamente para<Project Sdk="Microsoft.NET.Sdk.Web">
projetos.Aqui está o que eu precisava adicionar ao .CSPROJ:
<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="appsettings.Development.json"> <DependentUpon>appsettings.json</DependentUpon> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>
Depois disso, tive que descarregar / recarregar o projeto para que a alteração tivesse efeito no Solution Explorer. Observe que também defini esses arquivos para sempre serem copiados para o diretório de saída.
fonte
Se você quiser curinga em vez de mão-elaboração de cada entrada, adicionando estas linhas ao seu .csproj meio de arquivos que qualquer coisa como Foo.tests.cs obtém automagicamente sob aninhada Foo.cs
Testado e funcionando em VS2019 com .NET Core 3.1.0
<ItemGroup> <Compile Update="**\*.tests.cs"> <DependentUpon>$([System.String]::Copy(%(Filename)).Replace(".tests",".cs"))</DependentUpon> </Compile> </ItemGroup>
fonte
Se você estiver usando .netstandardx.x, você não pode usar NestedIn . Não está funcionando.
Você pode fazer isso manualmente em seu .csproj
<ItemGroup><Compile Include="BaseClass">ChildClass.cs</Compile></ItemGroup>
fonte
Se você usar o mesmo prefixo, ele aninhará os arquivos automaticamente.
Exemplo:
fonte