Dossier de solutions Visual Studio en tant que vrais dossiers

120

J'ai une solution Visual Studio. Actuellement, c'est une solution vide (= pas de projets) et j'ai ajouté quelques dossiers de solutions.

Les dossiers de solution ne semblent être que des «dossiers virtuels», car ils ne sont pas vraiment créés dans le système de fichiers et les fichiers à l'intérieur des dossiers de solution se trouvent simplement dans le même dossier que le fichier .sln.

Y a-t-il un paramètre que j'ai négligé qui indique à Visual Studio de traiter les dossiers de solution comme de «vrais» dossiers, c'est-à-dire de les créer dans le système de fichiers et d'y déplacer des fichiers lorsque je les déplace à l'intérieur de la solution dans l'un de ces dossiers?

Edit: Merci. Je vais faire une suggestion pour VS2010 alors :)

Michael Stum
la source
52
C'est l'une des bizarreries les plus ennuyeuses de Visual Studio
Andy White
Comment puis-je gérer correctement cette bizarrerie?
hellboy
Chose amusante, Rider a en quelque sorte cette fonctionnalité (mais le dossier doit être sur le même chemin que le fichier .sln, et la référence de dossier réelle n'est pas stockée dans le fichier .sln lui-même): jetbrains.com/help/rider/Extending_Your_Solution. html
rsenna
J'utilise VS 2017 et pour autant que je sache, MS n'a pas encore ajouté de fonctionnalité permettant d'ajouter des dossiers entiers à un dossier de solution - des fichiers individuels doivent être ajoutés.
Theo

Réponses:

43

Aucun réglage spécial. Je ne pense pas que ce soit pris en charge.

Vous pouvez créer de vrais dossiers dans un "projet" au sein de la solution, mais pas dans la solution elle-même.

svlistes
la source
1
Cela semble toujours être exact à partir de VS 2017.
Theo
2
... et VS 2019
whymatter le
l'une des pires choses à propos de VS. Pourquoi MS ne garde-t-il pas les dossiers Sln en option, mais autorise également l'ajout de vrais dossiers à la solution. Si ennuyant. Le système de fichiers fonctionne, pourquoi réinventer la roue (en carré).
MemeDeveloper le
46

Il existe une solution de contournement, qui se comporte réellement comme prévu .

  1. Ajoutez un site Web nouveau ou existant à la solution. (J'en crée généralement un nouveau.)
  2. Assurez-vous simplement qu'il est créé dans votre dossier de solution. (Je crée parfois même un "lien" vers un dossier externe, par exemple "Docs" ou "Marketing" sur un partage réseau. Dans ce cas, il est bien sûr ignoré par Git.)
  3. Assurez-vous d'aller dans les paramètres "Projet" ou Configuration Manager pour exclure ce "Site Web" de Build and Deploy !

Terminé. Désormais, l'Explorateur de solutions reflètera tout changement dans le système de fichiers et vice versa (y compris les sous-dossiers).

Je (manque) l'utilise pour les spécifications, les documents, le PM et certains scripts DevOps qui sont partagés au sein de l'équipe. Il est facile de choisir ce qu'il faut inclure dans le contrôle de code source ou non, et (s'il est configuré correctement) cela n'entre pas en conflit avec build.

Je sais que la fonctionnalité n'est pas destinée à ce cas d'utilisation, mais à part l'icône peut-être trompeuse «Projet», je n'ai pas encore trouvé de pénurie à ce hack. Et il existe encore des cas d'utilisation où les dossiers de solutions classiques (virtuels) fournis par VS s'intègrent dans l'image. Qu'est-ce que tu penses?

Michael
la source
4
Voici les instructions complètes: Cliquez avec le bouton droit sur la solution -> "Ajouter" -> "Nouveau site Web ..." -> (j'ai choisi "Site Web vide ASP.NET"). Après avoir changé l'emplacement, n'oubliez pas d'ajouter "\ MyName" au chemin, sinon cliquer sur "OK" rouvrira simplement la boîte de dialogue. Après cela, faites un clic droit sur votre solution -> "Propriétés" -> "Propriétés de configuration" -> décochez "Construire" pour le projet Web.
user764754
Cela fonctionne-t-il toujours? en utilisant VS2015 mais cela ne fonctionne pas.
Jan Paolo Go
Dans VS2017 crée parfaitement un vrai dossier mais l'icône du site Web (cercle noir) s'affiche dans l'Explorateur de solutions. Est-ce que quelqu'un sait comment résoudre ce problème?
Andrei Karcheuski
Oui, cela fonctionne dans VS2019, mais ne surveille toujours pas les modifications du système de fichiers. Vous devez parfois «Actualiser» pour voir les fichiers actuels. Si seuls les projets C # n'étaient pas le seul type de solution à prendre en charge le nouveau .*projformat basé sur le système de fichiers, plus propre et plus clair .
shannon le
33

Dans Visual Studio 2017, cliquez sur l'icône «Solutions et dossiers» dans la fenêtre Explorateur de solutions. Ce bouton bascule de la vue virtuelle «solution» à une «vue source» qui correspond à la disposition des dossiers et des fichiers sur le système de fichiers. Lorsque vous ajoutez un nouveau dossier, le dossier est créé physiquement à l'emplacement prévu. solutions et dossiers.

OdeToCode
la source
1
C'est utile mais en "vue source", vous avez perdu tous les raccourcis de clic droit sur un projet, c'est-à-dire "Gérer les packages NuGet".
David Liang
1
Pourquoi seuls les projets ou solutions C ++ se comportent-ils différemment des autres langages?
Friendly Ghost
1
Cela m'a aidé, j'ai donc créé un dossier dans la vue des dossiers où je le voulais, puis j'ai ajouté un dossier de solution et ajouté le projet en tant qu'enfant du dossier. Cela n'a pas vraiment de sens pour moi, mais cette réponse m'a aidé
hanzolo
C'est exactement ce que je veux. Merci!
user1633272
10

La réponse choisie suggère qu'il serait possible d'utiliser des projets réels au lieu de dossiers de solutions, mais n'explique pas vraiment comment. Je suppose que ce que je décris ici est peut-être le moyen le moins gênant d'y parvenir ... :-P

Le problème avec les fichiers de projet standard est qu'ils seront éventuellement compilés par MSBUILD. Et si vous voulez avoir un projet qui ne contient que des fichiers non compilables, ce sera un problème.

Mais il y a quelque temps, Visual Studio a introduit un nouveau type de projet: Projet partagé (extension .shproj). Ce type de projet n'est pas compilé par défaut, mais uniquement quand (et seulement si) il est référencé par un autre projet.

Une partie de l'astuce consiste donc à utiliser des projets partagés au lieu de dossiers de solutions . Il est évidemment possible d'ajouter un projet partagé qui n'est jamais référencé par aucun autre projet, ce qui signifie que nous pouvons éviter le problème présenté ci-dessus.

Ensuite, en utilisant la <None Include="**/*" />clause dans le fichier .shproj, nous pouvons le faire refléter automatiquement tous les nouveaux fichiers et / ou sous-dossiers.

Donc, en gros, faites ceci:

  • Créez un nouveau dossier dans votre solution.
  • Ajoutez un nouveau fichier .shproj à la racine de ce nouveau dossier.
  • Faites référence au nouveau .shproj dans votre solution.

Par exemple, dans mon cas, j'ai créé un DockerDev.shproj, donc je peux regrouper certains scripts liés à docker que nous exécutons uniquement sur nos machines de développement:

<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="**/*" />
  </ItemGroup>
</Project>

Ce fichier .shproj gardera une trace de n'importe quel fichier, dans n'importe quel sous-dossier de ce nouveau DockerDevdossier dans ma solution.

Pour autant que je puisse voir, cette solution fonctionne à peu près comme ce que l'OP a demandé: elle fonctionnera comme une référence non compilable à un dossier, et elle reflétera automatiquement toutes les modifications qui y sont apportées.

rsenna
la source
D'après mon expérience, cela s'accumule dès qu'un membre de l'équipe sans méfiance touche les propriétés d'un fichier; après quoi vous avez des fichiers en double qui apparaissent dans le volet de navigation. Dans certaines conditions, chaque fichier est énuméré dans le fichier .proj, puis la laideur s'ensuit. Bien que je n'aime pas abandonner, je préfère toujours l'approche «Ajouter un site Web existant».
shannon le
@shannon Je n'ai jamais connu le comportement que vous évoquez, mais "l'absence de preuves n'est pas une preuve d'absence", donc il y a ça. Mais j'utilise des projets partagés au quotidien, donc je pense que cela compte aussi. En ce qui concerne les projets de site Web (WSP), ils pourraient également fonctionner, je suppose, cela fait longtemps que je ne l'utilise pas.
rsenna le
8

Sara Ford a contribué à une macro pour faire cela. Dans Visual Studio 2010, si vous ouvrez votre explorateur de macros, vous verrez une macro appelée «GenerateSlnFolderOnDirStructure». Cela automatisera la création des dossiers de solution et ajoutera les fichiers.

SwampyFox
la source
6

Dossier vers dossier de solution par Cecilia Wirén - CeciliaSHARP

Supprimez les tracas liés à l'ajout de plusieurs fichiers dans le dossier de la solution. Utilisez simplement le menu contextuel de la solution et juste en dessous de l'option de création d'un nouveau dossier de solution, vous trouvez maintenant `` Ajouter un dossier en tant que dossier de solution ''. Cela créera un dossier de solution avec le même nom que celui que vous avez sélectionné et ajoutera les éléments à l'intérieur de ce dossier au dossier de solution. Cela ne déplacera pas les fichiers sur le disque.

Ryan
la source
3

Non, ce n'est pas pris en charge. Comme vous vous en doutez, les dossiers de solution sont simplement des sous-entrées virtuelles dans le fichier .sln, rien à voir avec le système de fichiers.

Alan
la source
3

Visual studio n'a aucun support pour cela. J'ai cependant fait une extension qui fait quelque chose de similaire pour VS2013. Il mappe les dossiers de solution aux dossiers physiques de votre disque dur, bien que le mappage soit à sens unique (du disque dur à la solution). Cela signifie que le contenu d'un dossier de solution reflétera le contenu du dossier du disque dur, et non l'inverse.

Avec cela à l'écart, l'extension peut encore être utile. Il prend en charge le mappage des dossiers de solution sur des dossiers physiques, le filtrage des fichiers et des répertoires basés sur l'expression régulière et la mémorisation des mappages dans votre fichier .sln. Les propriétés ne sont pas intrusives, donc les développeurs sans l'extension peuvent toujours ouvrir le sln et ne pas être affectés.

Hébergé sur la galerie Visual Studio: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd

Edit: téléchargé sur bitbucket. Maintenant open source. Licence MIT. https://bitbucket.org/LSS_NorthWind/physical-solution-folders

vent du nord
la source
3

Remarque: Oui, c'est possible, vous pouvez créer un dossier à la racine mais c'est un peu compliqué ....

En donnant quelques efforts supplémentaires, vous pouvez le faire. Comment? Permet de suivre l'étape -

  • 1-Créer un dossier par exemple: "nouveau dossier " à la racine (où réside votre fichier .sln).
  • 2.Copiez et collez vos projets dans le dossier.
  • 3. allez dans votre fichier sln et recherchez les projets déplacés et ajoutez newfolder \ dans l'adresse du projet déplacé.
  • 4. enregistrez le fichier sln.
  • 5.Ouvrez votre projet et validez le référentiel dans git ou so ...
  • 6.Prenez le référentiel sur un nouvel emplacement.

    Vous avez terminé...

si vous ne parvenez toujours pas à voir votre dossier -----

  • 1.Ajoutez un dossier de solution xyz.
  • 2.Ouvrez le fichier sln et modifiez ce nom de dossier avec votre nom de dossier.

Félicitations, vous avez terminé.

Si vous rencontrez un problème, écrivez-moi pour obtenir de l'aide.

Ankit
la source
3

Créez un "dossier Solution". Cela créera un dossier logique, mais pas physique. Cliquez avec le bouton droit sur le dossier de la solution et ouvrez une nouvelle boîte de dialogue de projet. Mais avant de cliquer sur OK, vous devez changer l'emplacement du projet dans le dossier physique souhaité et VS le créera et y placera le projet.

rc21
la source
1

Vous pouvez ajouter de vrais dossiers en choisissant «Ajouter un nouveau filtre» pour un fichier de projet Visual Studio. Vous pouvez également faire "Ajouter un nouveau filtre" sous un dossier existant. Une fois le dossier créé, renommez-le et ajoutez le fichier source ou d'en-tête ou selon ce qui convient à votre projet. C'est une façon que je connais qui nous permet de créer de vrais dossiers via l'IDE de Visual Studio.

Abhijit K Rao
la source
Cette fonctionnalité est spécifique aux projets C ++.
Tamir Daniely
Cette solution s'applique également aux projets VS - la question concerne les dossiers de niveau Solution.
Theo
0

Le dossier créé sous la solution sera virtuel comme indiqué. Peut-être que cela pourrait être appelé une solution de contournement, mais vous pouvez créer physiquement le dossier sur le disque avant ou lorsque vous ajoutez un nouvel élément / projet et Robert devrait être un frère ou une sœur de votre père.

ps- en regardant de plus près peut-être que je devrais expliquer "Bob est ton oncle" signifie votre amende / triée.

Colombe
la source
Est-ce important que Robert soit le frère de votre mère?
Darrel Lee
0

J'ai voulu cette fonctionnalité plusieurs fois moi-même, mais en fin de compte, vous ne voulez vraiment PAS pouvoir le faire. Considérez votre Solution (fichier) comme la racine d'une application Web et considérez les dossiers Solution comme des répertoires virtuels (littéralement et fonctionnellement). Le contenu d'un répertoire virtuel Web peut être physiquement sur un serveur complètement différent. Là où Visual Studio a brouillé le concept des dossiers de solution, c'est en vous permettant de créer de nouveaux fichiers dans le dossier. Vous devez toujours "Ajouter existant" lors de l'ajout de contenu. Lorsque vous ajoutez un fichier existant, il crée un lien vers l'emplacement source du fichier.

Mais la raison pour laquelle vous ne voulez pas que les dossiers de solution se comportent comme des dossiers «physiques» est que votre disposition de solution n'utilise pas nécessairement la même convention que votre disposition de contrôle de source. Les dossiers de solutions vous permettent de personnaliser la hiérarchie de vos projets afin de pouvoir regrouper les projets et les éléments comme vous le souhaitez, puis de décider que vous ne l'aimez pas et de le modifier à nouveau sans avoir à passer par le cauchemar du déplacement des éléments de contrôle de source. et irritant le reste de votre équipe.

Paul Pâques
la source
1
C'est la bonne réponse - créez le fichier sur le disque dans un dossier avec le même nom que le dossier virtuel, puis ajoutez le fichier dans VS en utilisant «Ajouter existant».
Richard
4
Ils auraient pu facilement implémenter des dossiers virtuels et physiques. C'est clairement un oubli. Voir référence: tous les autres IDE, jamais.
Tamir Daniely
6
Je ne comprends pas du tout pourquoi le concept de répertoires virtuels (IIS) a quelque chose à voir avec les dossiers de solution. Quant à l'argument de contrôle de source, je ne vois pas le problème. Pourquoi les déplacements de fichiers irriteraient-ils le reste de votre équipe? C'est une opération courante. Et pourquoi voudriez-vous que la disposition des fichiers dans le contrôle de code source soit différente de la disposition physique?
user247702
2
Dossiers de solutions physiques faciliteraient (mais juste un peu) pour créer des structures de dossiers modernes comme NancyFx de , où plusieurs projets entrent dans des catégories comme src, test, tools, etc. Vous voulez certainement voulez prendre cette décision au début du projet à votre point au sujet irritant l'équipe, mais c'est vrai pour la plupart des décisions architecturales.
Eric Eskildsen
3
-1 Mon cas d'utilisation est le suivant: parfois, nous voulons simplement ajouter certains documents à la solution. Ils ne seront pas construits, mais ils sont conservés dans le contrôle de code source. Nous avons généralement un dossier spécial pour eux. Je voudrais avoir ce dossier dans ma solution - pas les fichiers qu'il contient, mais le dossier lui-même. Oui, il existe des moyens de contourner cette limitation, mais ils ne sont pas optimaux. Avoir une référence réelle à un dossier dans la solution fonctionnerait simplement.
rsenna
0

J'ai un peu une solution de contournement pour cela (ce n'est pas génial, mais cela fonctionne).

  1. Créez un dossier dans votre solution (c'est-à-dire «Contoso»)
  2. Faites un clic droit sur la solution, puis cliquez sur "Ouvrir le dossier dans l'Explorateur de solutions"
  3. Créez le dossier physique (c'est-à-dire «Contoso») dans le répertoire de la solution
  4. Copiez / créez des fichiers dans le dossier physique.
  5. Faites glisser les fichiers dans le dossier virtuel de l'explorateur de solutions.

Ce n'est pas génial car vous devrez gérer manuellement les références de fichiers, mais cela fonctionne pour moi.

Matthew Layton
la source