Comment ajouter une arborescence de répertoires existante à un projet dans Visual Studio?

826

La question est vraiment simple. Au lieu de créer des dossiers dans Visual Studio, je crée une structure de répertoires pour mon projet sur le système de fichiers. Comment inclure tous les dossiers et fichiers dans un projet, en conservant la structure?

Si j'ajoute un fichier existant sur un dossier nommé Services et que je navigue vers un fichier dans la structure de répertoires. Services> AccountManagement> CreateAccount.cs, il apparaît dans Visual Studio comme ceci: Services> CreateAccount.cs. Je ne veux pas ça.

J'ai déjà élaboré une structure de répertoires complète, car j'imite nos développeurs clients en utilisant la même structure pour l'organisation. Comment ajouter tous les dossiers et fichiers au projet dans Visual Studio? Ou dois-je faire ce que la plupart des utilisateurs de Microsoft font et "accepter" et recréer chaque dossier via Visual Studio?

Brian Leahy
la source

Réponses:

1439

Vous devez mettre la structure de votre répertoire dans le répertoire de votre projet. Et puis cliquez sur l'icône "Afficher tous les fichiers" en haut de la boîte à outils de l'Explorateur de solutions. Après cela, le répertoire ajouté sera affiché. Vous devrez ensuite sélectionner ce répertoire, faire un clic droit et choisir «Inclure dans le projet».

entrez la description de l'image ici

entrez la description de l'image ici

Gant
la source
150
Existe-t-il un moyen de le faire avec un répertoire (arborescence) en dehors du répertoire du projet?
2011
2
Existe-t-il un moyen de le faire pour un dossier qui n'est PAS un sous-répertoire de l'emplacement de votre projet? ie: Demandez à E: \ ProjectX \ project.vcproj d'inclure le dossier E: \ Common * .cs ??
Matt Connolly
4
Fonctionne presque. Je peux voir l'arborescence des répertoires et ajouter plusieurs fichiers, mais cela ne me permettra pas d'ajouter un répertoire entier, y compris des sous-arborescences.
ManicBlowfish
5
Le problème est que cela ne fonctionne que si vous copiez l'arborescence de répertoires dans votre projet Visual via l'explorateur Windows. Comment faire si vous souhaitez simplement référencer certains dossiers et fichiers contenus dans un autre projet sur votre ordinateur?
hico
5
La seule façon que je sache de le faire en dehors du projet est d'utiliser un lien symbolique ... voir ma réponse: stackoverflow.com/a/26537736/835561
Edyn
77

Vous pouvez également faire glisser et déposer le dossier depuis l' Explorateur Windows sur votre fenêtre de solution Visual Studio.

Todd Smith
la source
14
Cela ne fonctionne pas dans mon installation de VS 2010 sur Vista Ultimate 64 bits.
John Melville
13
Non, cela ne fonctionne pas non plus dans mon installation VS 2010 sur Windows 7.
AH.
9
Confirmer que cela ne fonctionne pas également dans VS 2010 (mode non administrateur)
David Gardiner
9
Je ne pense pas que vous le fassiez bien. VS 2010 prend en charge le glisser-déposer des dossiers. Je le fais tout le temps pour inclure mes kits d'outils. Vous devez vous assurer que vous tombez dans l'arborescence du projet. Le panneau de solution et le nœud de solution lui-même ne recevront pas la goutte. L'OS n'est pas pertinent ici, mais pour les sceptiques, j'utilise Windows 7 64 bits.
Gavin Williams
4
Les «éléments de solution» sont différents de l'ajout d'éléments à un projet. Les éléments de solution sont un dossier spécial dans la solution VS.
Todd Smith
53

Dans Visual Studio 2015, voici comment procéder.

Si vous souhaitez inclure automatiquement tous les fichiers descendants sous un dossier spécifique:

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

Cela peut être limité pour inclure uniquement les fichiers dans le chemin spécifié:

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

Ou même uniquement des fichiers avec une extension spécifiée:

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

Référence: http://jamesrpatterson.com/blog/automatic-include-in-project-for-visual-studio

Yuchen Zhong
la source
3
J'ai trouvé cela utile parce que je pouvais alors inclure une seule balise pour "copier toujours sur la construction", plutôt que d'avoir à annoter chaque fichier individuel (comme c'était le cas dans la réponse acceptée)
Gordon Bean
3
IMO l'une des réponses les plus utiles ici.
Sinjai
Où est-ce ajouté? Comment accéder à une vue XML dans VS?
Matthew Dean
1
c'est la meilleure solution lorsque vous souhaitez ajouter un grand dossier de hiérarchie alors que Visual Studio ne répond pas et se bloque.
Gowtham Alan
1
C'est une honte pour l'équipe Microsoft VS
dejjub-AIS
33

Copiez et collez .

Pour ajouter un dossier, tous les sous-répertoires et les fichiers, nous pouvons également copier et coller. Par exemple, nous pouvons:

  1. Cliquez avec le bouton droit dans l'explorateur Windows sur le dossier et copiez sur le dossier contenant de nombreux fichiers et dossiers.

  2. Ensuite, dans l'explorateur de solutions Visual Studio, cliquez avec le bouton droit sur le dossier de destination et cliquez sur coller.

  3. Ajout facultatif à TFS; Ensuite, dans le dossier supérieur, cliquez avec le bouton droit de la souris et connectez-vous à TFS pour archiver tous les sous-dossiers et fichiers.

Catto
la source
Cela a fonctionné pour moi, mais le glisser-déposer ne fonctionnait pas dans VS14 et Windows 10 pro.
Mona Jalal
1
le glisser-déposer peut ne pas fonctionner sauf si vous exécutez VS en tant qu'administrateur
RThomas
18

Vous pouvez utiliser un lien symbolique. Cela fait que la modification du fichier dans un projet le modifie dans l'autre (car il s'agit en fait du même fichier).

Pour faire ça:

  1. Ouvrez l'invite cmd en tant qu'administrateur
  2. mklink / d [nom du répertoire du projet actuel] [répertoire dans un autre projet vers lequel il doit pointer]

Cela a ses inconvénients et ses pièges, mais je l'utilise à l'occasion pour des bibliothèques en double qui ont besoin de noms différents.

Modifier pour Anoop: étapes à ajouter à Visual Studio:

  1. Créez un lien dans le dossier du projet en suivant les étapes ci-dessus.
  2. Dans Visual Studio ... sélectionnez un projet dans l'Explorateur de solutions.
  3. En haut de l'Explorateur de solutions ... cliquez sur le bouton Afficher tous les fichiers (vous devrez peut-être cliquer deux fois s'il est déjà actif).
  4. Le lien apparaîtra maintenant dans votre projet ... cliquez avec le bouton droit et choisissez Inclure dans le projet.

Ce sont les étapes que je suis et travaille pour quelques projets différents.

Edyn
la source
Ça ne marche pas! les liens symboliques ne sont pas reconnus comme des dossiers
Anoop K. Prabhu
1
@Anoop: J'ai ajouté des étapes pour montrer comment j'utilise cette méthode. Veuillez essayer.
Edyn
1
Ça marche! J'essayais de créer un raccourci en cliquant avec le bouton droit sur le dossier, au lieu d'utiliser l'invite de commande et donc cela n'a pas fonctionné. En suivant les étapes décrites ci-dessus, le problème a été résolu. Merci
Anoop K. Prabhu
1
Remarque: mklink ne fonctionnera pas sur un système de fichiers FAT. C'est pour NTFS.
Adrian
Le contrôle des sources fera des ravages avec les liens symboliques. Git a besoin de privilèges d'administrateur ou vérifie simplement le fichier.
CAD bloke
13

Dans Visual Studio 2017, vous basculez entre la vue Solution et la vue Dossier d' avant en arrière. Je pense que c'est une meilleure option, car elle gardera la solution plus propre. Je l'utilise pour éditer des fichiers .gitignore, .md, etc.

Vue Solution et vue Dossier

Siavash Mortazavi
la source
5
La question est de savoir comment ajouter un dossier existant à la solution, pas seulement pour afficher les dossiers.
CShark
1
C'est une très bonne option pour voir la structure réelle, pour ouvrir un dossier dans l'explorateur de fichiers, etc. - mais malheureusement, vous ne pouvez pas ajouter une arborescence de dossiers existante à partir de la vue des dossiers. Cela n'est possible que dans la vue de la solution, car a décrit Gant .
Matt
12

Pour développer la réponse de Yuchen , vous pouvez inclure des fichiers et des chemins sous forme de lien. Ce n'est pas la même chose que d'ajouter les éléments existants car cela ne fait pas de copie supplémentaire dans la structure de dossiers de votre projet. Il est utile si vous souhaitez qu'un dossier / fichier canonique, etc. soit utilisé dans de nombreux endroits différents, mais que vous ne souhaitez en conserver qu'une version / copie.

Voici un exemple de ce que vous pouvez ajouter à un *.csprojfichier pour créer le lien

<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) est une variable d'environnement Windows que j'ai définie, vous pouvez utiliser les variables d'environnement intégrées de la même manière.

Le dernier groupe d'exemples est un tas de fichiers de contenu dont j'ai besoin dans la sortie finale. Voir https://stackoverflow.com/a/11808911/492 et d'autres réponses et liens là-bas pour en savoir plus.

Plus d'informations sur MSBuild sur https://msdn.microsoft.com/en-us/library/bb629388.aspx

CAD bloke
la source
2
Ça devrait être la réponse!
Jurijs Kastanovs
4

Je pense que j'ai trouvé un moyen de le faire avec le Compile Include = ". \ Code ***. Cs" Ce que je voulais, c'était d'inclure le code récursivement sous mon dossier Code.

Voici l'exemple de fichier de projet.

<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
la source
2

Dans Visual Studio 2013, je ne pouvais pas faire fonctionner "Inclure dans le projet" lorsque je fais un clic droit sur un dossier. Ce qui a fonctionné, c'est l'expansion du dossier, la sélection de tous les fichiers, puis le choix "Inclure dans le projet". C'était assez fastidieux car vous devez faire chaque dossier un par un (mais au moins vous pouvez faire tous les fichiers de chaque dossier en une seule fois), et il semble stocker le chemin du fichier (vous pouvez le voir en affichant les propriétés du fichier et en regardant l'option "Chemin relatif".)

J'espère l'utiliser pour déployer certains fichiers de données dans un projet Visual Studio Installer, et il semble récupérer les fichiers inclus et conserver leurs chemins.

Malvineous
la source
0

Pour autant que je sache, la seule façon de le faire dans VS2010 s'apparente à la méthode du glisser-déposer. Cliquez avec le bouton droit sur la solution à laquelle vous souhaitez ajouter un projet. Le menu d'application aura un élément d'ajout .... En ouvrant cela, vous constatez que l'une des options consiste à ajouter un projet existant à la solution.

Dans la boîte de dialogue qui s'ouvre, accédez au dossier contenant le fichier de projet pour la solution et sélectionnez-le. Dans le cadre de l'importation de ce fichier de projet, VS importera également l'intégralité du répertoire et, je suppose, tous les répertoires subordonnés faisant partie de ce projet.

Comme cela nécessite un fichier de projet existant, il ne sera pas impossible d'importer une arborescence de répertoires tant que cette arborescence n'aura pas été convertie en projet.

Fenton Smith
la source
0

Je n'ai trouvé aucune réponse à ma satisfaction, alors j'ai compris moi-même.

Voici la réponse si vous souhaitez ajouter des codes sources externes à votre projet et ne souhaitez pas copier sur tous les codes. J'ai de nombreuses dépendances sur d'autres gits et ils sont mis à jour toutes les heures, sinon minutieusement. Je ne peux pas faire de copie toutes les heures pour me synchroniser. Voici ce que tu dois faire.

Supposons que ce soit la structure:

/ root / projA / src

/ root / projA / inclut

/ root / projB / src

/ root / projB / inclut

/ root / yourProj / src

/ root / yourProj / inclut

  1. Démarrez votre solution VS.
  2. Cliquez avec le bouton droit sur le nom du projet juste en dessous de la solution.
  3. Cliquez ensuite sur "Ajouter", "Nouveau filtre", mettez le nom "projA" pour projA.
  4. Faites un clic droit sur le "projA", cliquez sur "Ajouter", "Nouveau filtre", entrez le nom "src"
  5. Faites un clic droit sur le "projA", cliquez sur "Ajouter", "Nouveau filtre", entrez le nom "comprend"
  6. Cliquez avec le bouton droit sur "projA" / "src", cliquez sur "Ajouter", "Élément existant", puis accédez à / root / projA / src pour ajouter tous les codes source ou un par un pour ceux que vous souhaitez.
  7. Faites de même pour "projA" / "includes"
  8. Faites de même pour projB. Désormais, les projets externes / existants en dehors du vôtre sont présents dans votre solution / projet. Les VS les compileront ensemble. Voici une astuce. Étant donné que le projA et le projB sont des dossiers virtuels sous votre projet, le compilateur peut ne pas trouver le projA / includes.

  9. S'il ne trouve pas le projA / includes, cliquez avec le bouton droit sur le projet, sélectionnez "Propriétés".

  10. Accédez à "C / C ++". Editez "Additional Include Directories", ajoutez votre projA / include en tant que tel "../projA/includes", chemin relatif.

Une mise en garde, s'il y a des fichiers d'inclusion / en-tête en double, «exclure du projet» sur le «fichier d'en-tête» ne fonctionne pas vraiment. C'est un bug dans VS.

davidj
la source
0

Visual Studio 2017 et les versions plus récentes prennent en charge un nouveau .csprojformat léger qui est devenu connu sous le nom de "format SDK". L'un des nombreux avantages de ce format est qu'au lieu de contenir une liste de fichiers et de dossiers qui sont inclus , les fichiers sont des caractères génériques inclus par défaut. Par conséquent, avec ce nouveau format, vos fichiers et dossiers - ajoutés dans l'Explorateur ou sur la ligne de commande - seront récupérés automatiquement!

Le .csprojfichier au format SDK fonctionne actuellement avec les types de projets suivants :

  • Projets de bibliothèque de classe

  • Applications console

  • Applications Web ASP.NET Core

  • Projets .NET Core de tout type

Pour utiliser le nouveau format, créez un nouveau projet .NET Core ou .NET Standard. Étant donné que les modèles n'ont pas été mis à jour pour le .NET Framework complet, même dans Visual Studio 2019, pour créer une bibliothèque de classes .NET, choisissez le modèle de bibliothèque standard .NET, puis modifiez le fichier de projet pour cibler la version du framework de votre choix ( le nouveau format de projet de style peut être modifié dans Visual Studio - cliquez simplement avec le bouton droit sur le projet dans l'Explorateur de solutions et sélectionnez "Modifier le fichier de projet"). Par exemple:

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

Lectures complémentaires:

Stephen Kennedy
la source