En los proyectos de MSBuild de la "vieja escuela", como todavía lo usan Windows Forms en VS2017, por ejemplo, los archivos se pueden "anidar" a través de un DependentUpon
elemento en el archivo csproj.
Usé esto para agrupar las pruebas unitarias en Noda Time, por ejemplo
<Compile Include="LocalDateTest.PeriodArithmetic.cs">
<DependentUpon>LocalDateTest.cs</DependentUpon>
</Compile>
Eso llevó a pruebas de fácil navegación:
"Perdí" a sabiendas esta característica al pasar a project.json
.NET Core, pero esperaba que volviera al convertir a MSBuild. Sin embargo, parece que los proyectos de MSBuild basados en .NET Core SDK (elemento raíz <Project Sdk="Microsoft.NET.Sdk">
) no reciben el mismo tratamiento en Visual Studio 2017, incluso si ItemGroup
se agrega manualmente con los mismos elementos que el proyecto de la "vieja escuela".
Los proyectos ASP.NET Core reciben anidación automática para CSS y Javascript minificados, pero no está claro cómo aplicar eso a C # en proyectos de biblioteca .NET Core.
fuente
*.cs
que ya está incluido de forma predeterminada y, por lo tanto, se ignora el contenido del elemento anidado.Microsoft.NET.Sdk.Web
incluso para bibliotecas de clases. Ahora no tengo que configurar el anidamiento en absoluto.En Visual Studio 2019, tengo un
<Project Sdk="Microsoft.NET.Sdk">
proyecto .NET Core 2.2 en el que quería los archivos appsettings.json / appsettings.Development.json bien anidados, tal como lo hacen automáticamente para los<Project Sdk="Microsoft.NET.Sdk.Web">
proyectos.Esto es lo que tuve que agregar al .CSPROJ:
<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> <Content Include="appsettings.Development.json"> <DependentUpon>appsettings.json</DependentUpon> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>
Después de eso, tuve que descargar / recargar el proyecto para que el cambio surtara efecto en el Explorador de soluciones. Tenga en cuenta que también configuro estos archivos para que siempre se copien en el directorio de salida.
fuente
Si desea utilizar un comodín en lugar de crear manualmente cada entrada, agregar estas líneas a su archivo .csproj significa que cualquier cosa como Foo.tests.cs se anida automáticamente en Foo.cs
Probado y funcionando en VS2019 con .NET Core 3.1.0
<ItemGroup> <Compile Update="**\*.tests.cs"> <DependentUpon>$([System.String]::Copy(%(Filename)).Replace(".tests",".cs"))</DependentUpon> </Compile> </ItemGroup>
fuente
Si usa .netstandardx.x, no puede usar NestedIn . No funciona.
Puede hacerlo manualmente en su .csproj
<ItemGroup><Compile Include="BaseClass">ChildClass.cs</Compile></ItemGroup>
fuente
Si usa el mismo prefijo, anidará los archivos automáticamente.
Ejemplo:
fuente