¿Cómo agrego un árbol de directorios existente a un proyecto en Visual Studio?

825

El problema es simple en realidad. En lugar de crear carpetas en Visual Studio, creo una estructura de directorios para mi proyecto en el sistema de archivos. ¿Cómo incluyo todas las carpetas y archivos en un proyecto, manteniendo la estructura?

Si "Agregar archivo existente" en una carpeta llamada Servicios y navego a un archivo en la estructura de directorios .. Servicios> Gestión de cuentas> CreateAccount.cs, aparece en Visual Studio de la siguiente manera: Servicios> CreateAccount.cs. No quiero esto.

Ya tengo una estructura de directorio completa, ya que estoy imitando a nuestros desarrolladores de clientes que usan la misma estructura para la organización. ¿Cómo agrego todas las carpetas y archivos al proyecto en Visual Studio? ¿O tengo que hacer lo que la mayoría de los usuarios de Microsoft hacen y "aguantar" y recrear todas y cada una de las carpetas a través de Visual Studio?

Brian Leahy
fuente

Respuestas:

1438

Necesita poner la estructura de su directorio en el directorio de su proyecto. Y luego haga clic en el icono "Mostrar todos los archivos" en la parte superior de la caja de herramientas del Explorador de soluciones. Después de eso, se mostrará el directorio agregado. Luego deberá seleccionar este directorio, hacer clic derecho y elegir "Incluir en el proyecto".

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Gant
fuente
150
¿Hay alguna manera de hacer esto con un directorio (árbol) fuera del directorio del proyecto?
Imre
2
¿Hay alguna manera de hacer esto para una carpeta que NO es un subdirectorio de dónde está su proyecto? es decir: ¿E: \ ProjectX \ project.vcproj incluye la carpeta E: \ Common * .cs ??
Matt Connolly
44
Casi funciona Puedo ver el árbol de directorios y agregar varios archivos, pero no me permite agregar un directorio completo, incluidos los subárboles.
ManicBlowfish
55
El problema es que SOLO FUNCIONA si copia el árbol de directorios en su proyecto Visual a través del explorador de Windows. ¿Cómo puede hacerlo si solo quiere hacer referencia a algunas carpetas y archivos contenidos en otro proyecto en su computadora?
hico
55
La única forma en que sé hacer esto fuera del proyecto es usando un enlace simbólico ... vea mi respuesta: stackoverflow.com/a/26537736/835561
Edyn el
77

También puede arrastrar y soltar la carpeta desde el Explorador de Windows en la ventana de la solución de Visual Studio.

Todd Smith
fuente
14
Esto no funciona en mi instalación de VS 2010 en Vista Ultimate 64 bit.
John Melville el
13
No, tampoco funciona en mi instalación de VS 2010 en Windows 7.
AH.
99
Confirmar que esto no funciona en VS 2010 (modo no administrador) también
David Gardiner
99
No creo que lo estén haciendo bien. VS 2010 admite la carpeta arrastrar y soltar. Lo hago todo el tiempo para incluir mis kits de herramientas. Debes asegurarte de caer en el árbol del proyecto. El panel de solución y el nodo de solución en sí no recibirán la caída. El sistema operativo es irrelevante aquí, pero para los que dudan, yo uso Windows 7 de 64 bits.
Gavin Williams
44
Los "Elementos de solución" son diferentes de agregar elementos a un proyecto. Los elementos de solución son una carpeta especial dentro de la solución VS.
Todd Smith
53

En Visual Studio 2015, así es como lo haces.

Si desea incluir automáticamente todos los archivos descendientes debajo de una carpeta específica:

<Content Include="Path\To\Folder\**" />

Esto puede restringirse para incluir solo archivos dentro de la ruta especificada:

<Content Include="Path\To\Folder\*.*" />

O incluso solo archivos con una extensión especificada:

<Content Include="Path\To\Folder\*.jpg" >

Referencia: http://jamesrpatterson.com/blog/automatic-include-in-project-for-visual-studio

Yuchen Zhong
fuente
3
Encontré esto útil porque podría incluir una sola etiqueta para "copiar siempre en la compilación", en lugar de tener que anotar cada archivo individual (como fue el caso en la respuesta aceptada)
Gordon Bean
3
OMI una de las respuestas más útiles aquí.
Sinjai
¿Dónde se agrega eso? ¿Cómo se llega a una vista XML en VS?
Matthew Dean el
1
Esta es la mejor solución cuando desea agregar una carpeta de jerarquía grande mientras Visual Studio no responde y se cuelga.
Gowtham Alan
1
Es una pena para el equipo de Microsoft VS
dejjub-AIS
33

Copiar y pegar .

Para agregar una carpeta, todos los subdirectorios y archivos también podemos copiar y pegar. Por ejemplo podemos:

  1. Haga clic derecho en el explorador de Windows en la carpeta y Copie en la carpeta con muchos archivos y carpetas.

  2. Luego, en el Explorador de soluciones de Visual Studio, haga clic derecho en la carpeta de destino y haga clic en pegar.

  3. Opcional agregar a TFS; Luego, en la carpeta superior, haga clic derecho y regístrese en TFS para registrar todas las subcarpetas y archivos.

Catto
fuente
Esto funcionó para mí, pero arrastrar y soltar no funcionó en VS14 y Windows 10 pro.
Mona Jalal
1
arrastrar y soltar puede no funcionar a menos que esté ejecutando VS como administrador
RThomas
18

Puedes usar un enlace simbólico. Esto hace que modificar el archivo en un proyecto lo modifique en el otro (ya que en realidad es el mismo archivo).

Para hacer esto:

  1. Abra el indicador de cmd como administrador
  2. mklink / d [nombre del directorio del proyecto actual] [directorio en otro proyecto al que debería apuntar]

Esto tiene sus inconvenientes y dificultades, pero lo uso ocasionalmente para bibliotecas duplicadas que necesitan nombres diferentes.

Editar para Anoop: pasos para agregar a Visual Studio:

  1. Cree un enlace en la carpeta del proyecto siguiendo los pasos anteriores.
  2. En Visual Studio ... seleccione el proyecto en el Explorador de soluciones.
  3. En la parte superior del Explorador de soluciones ... haga clic en el botón Mostrar todos los archivos (es posible que deba hacer clic dos veces si ya está activo).
  4. El enlace ahora se mostrará en su proyecto ... haga clic con el botón derecho y elija Incluir en el proyecto.

Estos son los pasos que sigo y funciona para un par de proyectos diferentes.

Edyn
fuente
¡No funciona! los enlaces simbólicos no se reconocen como carpetas
Anoop K. Prabhu
1
@Anoop: agregué pasos para mostrar cómo uso este método. Por favor inténtalo.
Edyn
1
¡Esta funcionando! Intenté crear un acceso directo haciendo clic derecho en la carpeta, en lugar de usar el símbolo del sistema y, por lo tanto, no funcionó. Siguiendo los pasos descritos anteriormente se solucionó el problema. Gracias
Anoop K. Prabhu
1
Nota: mklink no funcionará en un sistema de archivos FAT. Es para NTFS.
Adrian
El control de la fuente causará estragos con los enlaces simbólicos. Git necesita privilegios de administrador o simplemente registra el archivo.
CAD bloke
13

En Visual Studio 2017, cambia entre Vista de solución y Vista de carpeta de un lado a otro. Creo que esta es una mejor opción, ya que mantendrá la solución más limpia. Lo uso para editar archivos .gitignore, .md, etc.

Vista de solución y vista de carpeta

Siavash Mortazavi
fuente
55
La pregunta es cómo agregar una carpeta existente a la solución, no solo para ver carpetas.
CShark
1
Esta es una muy buena opción para ver la estructura real, abrir una carpeta en el explorador de archivos, etc., pero desafortunadamente no puede agregar un árbol de carpetas existente desde la vista de carpetas. Eso solo es posible en la vista de solución, como Gant lo ha descrito.
Matt
12

Para ampliar la respuesta de Yuchen , puede incluir archivos y rutas como un enlace. Esto no es lo mismo que agregar los elementos existentes porque no hace una copia adicional en la estructura de carpetas de su proyecto. Es útil si desea que se use una carpeta / archivo canónico, etc. en muchos lugares diferentes, pero solo desea mantener una versión / copia de la misma.

Aquí hay un ejemplo de lo que puede agregar a un *.csprojarchivo para crear el enlace.

<Compile Include="$(Codez)\z.Libraries\Common\Strings\RegexExtensions.cs">
    <Link>Helpers\RegexExtensions.cs</Link>
</Compile>

<Compile Include="..\..\z.Libraries\MoreLINQ\MoreLinq\ExceptBy.cs">
    <Link>Helpers\ExceptBy.cs</Link>
</Compile>

<Content Include="C:\Codez\Libs\Folder\OtherFolder\**\*.*">
    <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

$(Codez) es una variable de entorno de Windows que definí, puede usar las variables de entorno integradas de la misma manera.

El último grupo de ejemplo es un montón de archivos de contenido que necesito en la salida final. Consulte https://stackoverflow.com/a/11808911/492 y otras respuestas y enlaces allí para obtener más información al respecto.

Más información sobre MSBuild en https://msdn.microsoft.com/en-us/library/bb629388.aspx

Tipo CAD
fuente
2
Esta debería ser la respuesta!
Jurijs Kastanovs
4

Creo que encontré una manera de hacer esto con Compile Include = ". \ Code ***. Cs" Lo que quería era incluir código recursivamente en mi carpeta de Código.

Aquí está la muestra del archivo del proyecto.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0" DefaultTargets="BuildTarget">
    <PropertyGroup>
        <OutputType>Library</OutputType>
    </PropertyGroup>
    <PropertyGroup>
        <StartupObject />
    </PropertyGroup>
    <PropertyGroup>
        <RootNamespace>Autogen</RootNamespace>
    </PropertyGroup>
    <ItemGroup>
        <Compile Remove="@(Compile)" />
        <Compile Include=".\Code\**\*.cs" />
    </ItemGroup>
    <Target Name="BuildTarget">
        <Message Text="Build selected" Importance="high"/>
    </Target>
</Project>
RJ Thompson
fuente
2

En Visual Studio 2013, no podía hacer que "Incluir en el proyecto" funcionara al hacer clic derecho en una carpeta. Lo que funcionó fue expandir la carpeta, seleccionar todos los archivos y luego elegir "Incluir en el proyecto". Fue bastante tedioso ya que tienes que hacer cada carpeta una por una (pero al menos puedes hacer todos los archivos de cada carpeta de una sola vez), y parece almacenar la ruta del archivo (puedes ver esto viendo las propiedades en el archivo y mirando la opción "Ruta relativa").

Espero usar esto para implementar algunos archivos de datos en un proyecto de Visual Studio Installer, y parece que recoge los archivos incluidos y conserva sus rutas.

Malvinoso
fuente
0

Por lo que puedo decir, la única forma de hacer esto en VS2010 es similar al método de arrastrar y soltar. Haga clic derecho en la solución a la que desea agregar un proyecto. El menú de la aplicación tendrá un elemento agregar ... Al abrir eso, encontrará que una de las opciones es agregar un proyecto existente a la solución.

En el cuadro de diálogo que se abre, navegue a la carpeta que contiene el archivo del proyecto para la solución y selecciónelo. VS, como parte de la importación de ese archivo de proyecto, también importará todo el directorio y, supongo, cualquier directorio subordinado que sea parte de ese proyecto.

Como esto requiere un archivo de proyecto existente, no será imposible importar un árbol de directorios hasta que ese árbol se haya convertido en un proyecto.

Fenton Smith
fuente
0

No encontré ninguna respuesta a mi satisfacción, así que me di cuenta.

Aquí está la respuesta si desea agregar códigos fuente externos a su proyecto y no desea copiar los códigos completos. Tengo muchas dependencias de otros gits y se actualizan cada hora, si no minuciosamente. No puedo copiar cada hora para sincronizar. Aquí está lo que tú necesitas hacer.

Supongamos que esta es la estructura:

/ root / projA / src

/ root / projA / incluye

/ root / projB / src

/ root / projB / incluye

/ root / yourProj / src

/ root / yourProj / incluye

  1. Comience su solución VS.
  2. Haga clic derecho en el nombre del proyecto justo debajo de la Solución.
  3. Luego haga clic en "Agregar", "Nuevo filtro", ponga el nombre "projA" para projA.
  4. Haga clic derecho en "projA", haga clic en "Agregar", "Nuevo filtro", ingrese el nombre "src"
  5. Haga clic derecho en "projA", haga clic en "Agregar", "Nuevo filtro", ingrese el nombre "incluye"
  6. Haga clic con el botón derecho en "projA" / "src", haga clic en "Agregar", "Elemento existente", luego navegue hasta / root / projA / src para agregar todos los códigos fuente o uno por uno para los que desee.
  7. Haga lo mismo para "projA" / "incluye"
  8. Haz lo mismo para projB. Ahora los proyectos externos / existentes fuera de los suyos están presentes en su solución / proyecto. El VS los compilará juntos. Aquí hay un truco. Como el projA y el projB son carpetas virtuales bajo su proyecto, el compilador puede no encontrar el projA / incluye.

  9. Si no encuentra el proyecto / incluye, haga clic derecho en el proyecto, seleccione "Propiedades".

  10. Navegue a "C / C ++". Edite "Directorios de inclusión adicionales", agregue su projA / include como tal "../projA/includes", ruta relativa.

Una advertencia, si hay archivos de inclusión / encabezado duplicados, la "exclusión del proyecto" en el "archivo de encabezado" realmente no funciona. Es un error en VS.

davidj
fuente
0

Visual Studio 2017 y versiones posteriores admiten un nuevo .csprojformato liviano que se conoce como "formato SDK". Una de las varias ventajas de este formato es que, en lugar de contener una lista de archivos y carpetas que se incluyen , los archivos están incluidos de manera predeterminada. Por lo tanto, con este nuevo formato, sus archivos y carpetas, agregados en el Explorador o en la línea de comandos, ¡serán recogidos automáticamente!

El .csprojarchivo de formato SDK actualmente funciona con los siguientes tipos de proyectos :

  • Proyectos de biblioteca de clase

  • Aplicaciones de consola

  • Aplicaciones web ASP.NET Core

  • Proyectos de .NET Core de cualquier tipo

Para usar el nuevo formato, cree un nuevo proyecto .NET Core o .NET Standard. Debido a que las plantillas no se han actualizado para el .NET Framework completo, incluso en Visual Studio 2019, para crear una biblioteca de clases .NET, elija la plantilla de la Biblioteca estándar .NET y luego edite el archivo del proyecto para apuntar a la versión de marco de su elección ( el nuevo formato de proyecto de estilo se puede editar dentro de Visual Studio: simplemente haga clic derecho en el proyecto en el Explorador de soluciones y seleccione "Editar archivo de proyecto"). Por ejemplo:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net46</TargetFramework>
  </PropertyGroup>
</Project>

Otras lecturas:

Stephen Kennedy
fuente