Se pueden anidar archivos en el Explorador de soluciones VS2017 for.NET Básica (non-ASP.NET Core) projects?


En los proyectos de MSBuild de la "vieja escuela" - como todavía se usa en Windows Forms en VS2017, por ejemplo - los archivos podrían estar "anidados" a través de un elemento DependentUpon en el archivo csproj.

Utilicé esto para agrupar las pruebas unitarias en tiempo Noda, por ejemplo,

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

Que condujo a pruebas fácilmente navegables:

Pruebas anidadas

A sabiendas "perdí" esta característica cuando me moví a project.json para.NET Core, pero esperaba que volviera al convertir a MSBuild. Sin embargo, parece que los proyectos basados en MSBuild en el SDK de. NET Core (elemento raíz <Project Sdk="Microsoft.NET.Sdk">) no reciba el mismo tratamiento en Visual Studio 2017, incluso si se agrega un ItemGroup manualmente con los mismos elementos que el proyecto "old school".

ASP.NET Los proyectos principales reciben anidamiento automático para CSS y Javascript minificados, pero no está claro cómo aplicarlo a C# en los proyectos de la biblioteca principal de.NET.

Author: David Pine, 2017-05-08

3 answers

Lo tengo trabajando en uno de mis proyectos de estilo Microsoft.NET.Sdk usando algo similar a lo siguiente:

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

El truco aquí es usar Update en lugar de Include. Esto se debe a que los elementos implícitos provienen de un archivo props que se importa antes del proyecto principal. Un Include adicional no afectará a los archivos que ya están incluidos, pero se pueden modificar usando Update.

 53
Author: MatthewKing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-08 11:58:02

Si usa el mismo prefijo anidará archivos automáticamente.

Ejemplo:

AsemblyInfo.cs 
AsemblyInfo.local.cs
 2
Author: Miguel Domingues,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-28 10:13:21

Si usa .netstandardx.x no se puede utilizar NestedIn . No está funcionando.

Puede hacerlo manualmente en su .csproj

<ItemGroup><Compile Include="BaseClass">ChildClass.cs</Compile></ItemGroup>
 1
Author: Batuhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-22 15:26:51