Agrupar archivos en Visual Studio

78

Estoy buscando ordenar el diseño de mi proyecto en Visual Studio y me pregunto si hay algún truco, complemento o truco para asociar un archivo .xml con un archivo .cs del mismo nombre para que aparezcan agrupados en mi navegador de soluciones. /explorador.

Similar a la forma en que el archivo de código subyacente se asocia con su aspx.

texto alternativo

Cualquier sugerencia bienvenida. Gracias

mat-mcloughlin
fuente
Relacionado: consulte esta respuesta para saber cómo anidar (agrupar) .csarchivos en un proyecto .NET Core.
DavidRR

Respuestas:

72

En su archivo de proyecto:

<Compile Include="FileA.cs"/>
<Compile Include="FileA.xml">
  <DependentUpon>FileA.cs</DependentUpon>
</Compile>

O puede usar el Group Itemscomando de la extensión VSCommands 2010 .

Editar: en caso de que su archivo esté en una carpeta, no incluya el nombre de la carpeta en la DependentUponetiqueta. Por ejemplo, si su archivo está en la Helperscarpeta:

<Compile Include="Helpers\FileA.cs"/>
<Compile Include="Helpers\FileA.xml">
  <DependentUpon>FileA.cs</DependentUpon>
</Compile>
Julien Hoarau
fuente
2
¡Perfecto! Realmente no pensé que sería posible
mat-mcloughlin
Descubrí que en un proyecto VS2010 VB, si está intentando agregar una clase secundaria (por ejemplo, parcial) a un control XAML, el archivo secundario se ocultará a menos que elija "Mostrar todos los archivos". Confuso, así que simplemente agregue .xaml.vb al final y luego se muestra.
Rocklan
1
Estaba confundido sobre cómo usar la función VSCommands Group hasta que vi esta publicación. Para usar la función de grupo VSCommands, RESALTE TODOS los archivos que desea agrupar, luego haga clic DERECHO en CUALQUIERA de ellos, luego haga clic en agrupar.
Chris
1
@Julien, mientras iba a rechazar esto, lo pensé mejor porque técnicamente esto anida los archivos y eso es lo que hacía la pregunta. Lo que la mayoría no sabe y la inspiración de mi reacción inicial al voto negativo fue porque hacer esto rompe la capacidad de VS para cambiar el nombre de los archivos. Vea mi respuesta aquí para obtener más información y por qué finalmente decidimos no hacer esto.
Mark A. Donohoe
Para VS2017, tuve que usar <Compile Update = "FileA.xml" DependentUpon = "FileA.cs" />
Jamie Burns
57

Si no desea ralentizar su IDE con la extensión VSCommands pesada y propietaria, puede usar la extensión pequeña NestIn en su lugar. No puede nada más que agrupar / desagrupar archivos

Dao
fuente
Muy útil, pero no puede cambiar el nombre de los elementos anidados.
stian.net
6
También éste: archivo de agrupamiento visualstudiogallery.msdn.microsoft.com/...
Tohid
1
@Tohid, su enlace a File Nesting Extension es demasiado valioso para ser un simple comentario. Supongo que sería mejor publicarlo como respuesta.
AlexMelw
2

Para el caso simple en el que el archivo es un archivo de "nivel superior", la descripción de Julien funciona perfectamente. Sin embargo, en el caso de que el archivo DependentUpon esté en una Carpeta del proyecto, esto se verá diferente. Personalmente, no me gusta porque parece que podría generar ambigüedad, pero esa es una opinión.

<Compile Include="DataStructs\CKDTree.cs" />
<Compile Include="DataStructs\CClosestObjects.cs" >
    <DependentUpon>CKDTree.cs</DependentUpon>
</Compile>

Tenga en cuenta que el elemento dependiente NO incluye la carpeta del padre. Esto es cierto en VS2013 ... probablemente cierto en versiones anteriores, pero no lo he verificado.

Veldaeven
fuente
Gracias, es bueno saber el bit de carpeta "faltante". Me preguntaba por qué no apareció correctamente en VS2013.
John Korsnes
Creo que no es necesario porque asume que el archivo 'padre' relacionado (ruta sans) es hermano del archivo 'hijo' y el hijo especifica una ruta. Una simple prueba de agregar un segundo archivo CKDTree.cs en una ubicación diferente, luego crear un niño en esa otra ubicación pero con exactamente el mismo DependentUponelemento confirmaría esta hipótesis. Aún así, como llamé en mi respuesta a continuación, esto rompe la capacidad de VS para cambiar el nombre de los archivos, así que tenga cuidado al hacer esto.
Mark A. Donohoe
1

La extensión File Nesting para Visual Studio es buena. Tiene alrededor de 500K descargas al momento de escribir esta respuesta. Lo agregué personalmente a mi VS 2015 y estaba funcionando bien (todavía no lo he probado con VS 2017).

Esconder
fuente
0

No estoy seguro si la gente lo sabe, pero anidar archivos como este aparentemente rompe la capacidad de VS para cambiar el nombre del archivo raíz, al menos cuando su nuevo archivo anidado también es una clase parcial. Por ejemplo, aquí está el árbol que creamos ...

MainWindow.xaml
    MainWindow.xaml.cs
    MainWindow.Commands.cs

MainWindow.Commands.cs es solo otra clase parcial de MainWindow, igual que MainWindow.xaml.cs. Sin embargo, si intenta cambiar el nombre de MainWindow.xaml, en lugar de cambiar automáticamente el nombre de los archivos dependientes, arroja una excepción.

Para completar, también intenté nombrar el archivo, MainWindow.xaml.Commands.cspero tampoco funcionó.

Sin el archivo de 'comandos' adicional, el cambio de nombre funciona bien, por supuesto.

MainWindow.xaml
    MainWindow.xaml.cs

De todos modos, esta fue razón suficiente para que abandonáramos archivos de anidamiento como este. Sin la capacidad de cambiar el nombre, simplemente no vale la pena.

Mark A. Donohoe
fuente
Acabo de probar esto con clases parciales (1 raíz, 2 hijos) y no obtuve ningún error al cambiar el nombre de la raíz. VS 2015
ATD
Tendré que comprobarlo de nuevo con 2015. Creo que estaba usando 2012/3 en ese momento
Mark A. Donohoe