Visual Studio Solutions-map als echte mappen

Ik heb een Visual Studio-oplossing. Momenteel is het een lege oplossing (=geen projecten) en ik heb een paar oplossingsmappen toegevoegd.

Oplossingsmappen lijken alleen “virtuele mappen” te zijn, omdat ze niet echt in het bestandssysteem zijn gemaakt en bestanden in oplossingsmappen gewoon in dezelfde map staan ​​als het .sln-bestand.

Is er een instelling die ik over het hoofd heb gezien die Visual Studio vertelt om oplossingsmappen als “echte” mappen te behandelen, dat wil zeggen om ze in het bestandssysteem te maken en bestanden erin te verplaatsen wanneer ik ze in de oplossing naar een van de die mappen?

Bewerken:bedankt. Ik ga dan een suggestie doen voor VS2010 🙂


Antwoord 1, autoriteit 100%

Er is een tijdelijke oplossing die zich daadwerkelijk gedraagt ​​zoals verwacht.

  1. Voeg een nieuweof bestaande websitetoe aan de oplossing. (Ik maak meestal een nieuwe aan.)
  2. Zorg er wel voor dat het in uw oplossingsmap is gemaakt. (Soms maak ik zelfs een “link” naar een externe map, bijvoorbeeld ‘Docs’ of ‘Marketing’ op een netwerkshare. In dat geval wordt het natuurlijk door Git genegeerd.)
  3. Zorg ervoor dat u naar de “Project”-instellingen of Configuration Manager gaat om deze “Website” uit te sluiten van bouwen en implementeren!

Gereed. Nu zal Solution Explorer elke wijziging in het bestandssysteem weergeven en vice versa(inclusief submappen).

Ik (mis)gebruik het voor specificaties, documenten, PM en enkele DevOps-scripts die binnen het team worden gedeeld. Het is gemakkelijk om te kiezen wat wel of niet in bronbeheer moet worden opgenomen, en (indien correct ingesteld) is het niet in strijd met de build.

Ik weet dat de functie niet bedoeld is voor dat gebruik, maar behalve het misschien misleidende “Project”-pictogram heb ik nog geen tekortkomingen van die hack gevonden. En er zijn nog steeds use cases waarbij de klassieke (virtuele) Solution Folders die VS levert, in het plaatje passen. Wat denk je?


Antwoord 2, autoriteit 94%

Geen speciale instelling. Ik denk niet dat het wordt ondersteund.

U kunt echte mappen maken in een “project” binnen de oplossing, maar niet in de oplossing zelf.


Antwoord 3, autoriteit 81%

Klik in Visual Studio 2017 op het pictogram “Oplossingen en mappen” in het venster Solution Explorer. Deze knop schakelt van de virtuele “oplossingsweergave” naar een “bronweergave” die overeenkomt met de lay-out van mappen en bestanden op het bestandssysteem. Wanneer u een nieuwe map toevoegt, wordt de map fysiek op de verwachte locatie gemaakt.
oplossingen en mappen.


Antwoord 4, autoriteit 21%

Het gekozen antwoord suggereert dat het mogelijk zou zijn om echte projecten te gebruiken in plaats van oplossingsmappen, maar legt niet echt uit hoe. Ik denk dat wat ik hier beschrijf misschien wel de minst ongemakkelijkemanier is om dat te bereiken… 😛

Het probleem met gewoneprojectbestanden is dat ze uiteindelijk worden gecompileerd door MSBUILD. En als u een project wilt hebben dat alleen niet-compileerbare bestanden bevat, is dat zaleen probleem.

Maar enige tijd geleden introduceerde Visual Studio een nieuw projecttype: Gedeeld project(.shproj-extensie). Dit projecttype wordt nietstandaard gecompileerd, maar alleen wanneer (en alleen als) ernaar wordt verwezen door een ander project.

Dus een deel van de truc hier is om gedeelde projecten te gebruiken in plaats van oplossingsmappen. Het is uiteraard mogelijk om een ​​gedeeld project toe te voegen waarnaar nooitwordt verwezen door een ander project, wat betekent dat we het hierboven beschreven probleem kunnen vermijden.

Dan kunnen we door het gebruik van de clausule <None Include="**/*" />in het .shproj-bestand ervoor zorgen dat het automatischalle nieuwe bestanden en/of submappen.

Dus in principe doe je dit:

  • Maak een nieuwe map in uw oplossing.
  • Voeg een nieuw .shproj-bestand toe aan de hoofdmap van deze nieuwe map.
  • Verwijs naar de nieuwe .shproj in uw oplossing.

In mijn geval heb ik bijvoorbeeld een DockerDev.shproj gemaakt, zodat ik enkele docker-gerelateerde scripts kan groeperen die we alleen op onze ontwikkelmachines uitvoeren:

<?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>

Dit .shproj-bestand houdt elkbestand bij, in elkesubmap van deze nieuwe DockerDev-map in mijn oplossing.

Voor zover ik kon zien, werkt deze oplossing ongeveer zoals de OP heeft gevraagd: het zal werken als een niet-compileerbare verwijzing naar een map en het zal automatisch alle aangebrachte wijzigingen weerspiegelen.


Antwoord 5, autoriteit 15%

Sara Ford heeft een macro bijgedragen om dit toe te voegen. Als u in Visual Studio 2010 uw Macro Explorer opent, ziet u een macro met de naam “GenerateSlnFolderOnDirStructure”. Dit zal het aanmaken van de Oplossingsmappen automatiseren en de bestanden toevoegen.


Antwoord 6, autoriteit 13%

Map naar oplossingsmap door Cecilia Wirén – CeciliaSHARP

Verwijder het gedoe van het toevoegen van meerdere bestanden aan de oplossingsmap. Gebruik gewoon het contextmenu voor de oplossing en net onder de optie om een ​​nieuwe oplossingsmap aan te maken vindt u nu ‘Map toevoegen als oplossingsmap’. Hiermee wordt een oplossingsmap gemaakt met dezelfde naam als die u hebt geselecteerd en worden de items in die map toegevoegd aan de oplossingsmap. Hierdoor worden de bestanden op schijf niet verplaatst.


Antwoord 7, autoriteit 10%

Nee, het wordt niet ondersteund. Zoals je al vermoedde, zijn oplossingsmappen gewoon virtuele subitems in het .sln-bestand, en hebben ze niets te maken met het bestandssysteem.


Antwoord 8, autoriteit 8%

Je kunt je nieuwe oplossingsmapnesting level en ook de naam synchroniseren met de daadwerkelijke mapvan het bestandssysteem en het werkt als een zonnetje!

Bestaand project :

  • Maak de eigenlijke map
  • Maak de oplossingsmap met exact dezelfde naam
  • Kopieer uw projectmap naar de nieuwe map (werkelijk bestandssysteem)
  • (in oplossingenverkenner) – Klik met de rechtermuisknop op dezelfde map
  • Toevoegen => Bestaand project

Nieuw project toevoegen:

  • Maak uw oplossingsmappen
  • (Klik met de rechtermuisknop op de oplossing) => Nieuw project toevoegen
  • Wijzighet Locatie-adres onder de projectnaam die u wilt toevoegen, naar exact hetzelfde adres in uw oplossingsmappen

Antwoord 9, autoriteit 6%

Visual studio ondersteunt dit niet. Ik heb echter een extensie gemaakt die iets soortgelijks doet voor VS2013. Het wijst oplossingsmappen toe aan fysieke mappen op uw harde schijf, hoewel de toewijzing eenrichtingsverkeer is (van harde schijf naar oplossing). Dat betekent dat de inhoud van een oplossingsmap de inhoud van de map op de harde schijf weerspiegelt, en niet andersom.

Als dat uit de weg is, kan de extensie nog steeds nuttig zijn.
Het biedt ondersteuning voor het toewijzen van oplossingsmappen aan fysieke mappen, het filteren van bestanden en mappen op basis van regex en het onthouden van toewijzingen in uw .sln-bestand. Eigenschappen zijn niet-intrusief, dus ontwikkelaars zonder de extensie kunnen de sln nog steeds openen en worden niet beïnvloed.

Gehost op visuele studiogalerij:
https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6 -b300-044dd21f02bd

Bewerken: geüpload naar bitbucket. Nu opensource. MIT-licentie. https://bitbucket.org/LSS_NorthWind/physical-solution-folders


Antwoord 10, autoriteit 6%

Opmerking: Ja, dit is mogelijk, je kunt een map op root maken, maar het is een beetje lastig….

Door wat extra inspanningen te leveren, kunt u het doen. Hoe?
Laten we de stap volgen–

  • 1-Maak map bijv.: “nieuwe map” op root (waar uw .sln-bestand zich bevindt).
  • 2.Kopieer en plak uw projecten in de map.
  • 3.ga naar je sln-bestand en zoek verplaatste projecten en voeg nieuwe map\ toe aan het adres van het verplaatste project.
  • 4.Sln-bestand opslaan.
  • 5.Open je project en commit de repository in git of zo…
  • 6.Neem de repository op een nieuwe locatie.

    U bent klaar…

als u uw map nog steeds niet kunt zien —–

  • 1.Voeg een oplossingsmap xyz toe.
  • 2.Open het sln-bestand en wijzig die mapnaam met uw mapnaam.

Gefeliciteerd dat je klaar bent..

Als je een probleem hebt, schrijf me dan gewoon voor hulp..


Antwoord 11, autoriteit 6%

Maak een “Oplossingsmap”. Hiermee wordt een logische map gemaakt, maar geen fysieke.
Klik met de rechtermuisknop op de oplossingsmap en open een nieuw projectdialoogvenster. Maar voordat u op OK klikt, moet u een projectlocatie wijzigen in de gewenste fysieke map en VS zal deze maken en het project erin plaatsen.


Antwoord 12, autoriteit 6%

Voor C# in Visual Studio 2019heb ik deze manier gebruikt (Het lijkt op dit antwoord, maar dat werkte in ieder geval niet in C#-oplossingen)

  1. Klik in de oplossingsverkenner op switch views

voer hier de afbeeldingsbeschrijving in

  1. Kies folder view

voer hier de afbeeldingsbeschrijving in

  1. U kunt individuele mappen aan de oplossing toevoegen

voer hier de afbeeldingsbeschrijving in

  1. Om terug te gaan naar de normale weergave van de oplossingenverkenner, klikt u nogmaals op switch viewsen kiest u de oplossing.

Er lijkt een beperking te zijn op deze manier (commentaar van @montonero):

… open gewoon een oplossing met meerdere projecten en probeer de projecten naar andere echte mappen te verplaatsen via de mapweergave. Het probleem is dat VS paden naar projecten in een oplossingsbestand niet bijwerkt


Antwoord 13, autoriteit 4%

Ik heb deze functie zelf al een paar keer gewild, maar uiteindelijk wil je NIETde mogelijkheid om dit te doen. Beschouw uw oplossing (bestand) als de root van een webtoepassing en denk aan oplossingsmappen als virtuele mappen (letterlijk en functioneel). De inhoud van een virtuele webmap kan zich fysiek op een andere server bevinden. Waar Visual Studio het concept van oplossingsmappen verwarde, is door u toe te staan ​​nieuwe bestanden in de map te maken. U moet altijd ‘Bestaande toevoegen’wanneer u inhoud toevoegt. Als je bestaande toevoegt, wordt er een link gemaakt naar de bronlocatie van het bestand.

Maar de reden waarom u niet wilt dat oplossingsmappen zich gedragen als “fysieke” mappen, is dat uw oplossingslay-out niet noodzakelijk dezelfde conventie gebruikt als uw source control-lay-out. Met oplossingsmappen kunt u de hiërarchie van uw projecten aanpassen, zodat u projecten en items op elke gewenste manier kunt groeperen, en vervolgens kunt besluiten dat u het niet leuk vindt en het opnieuw kunt wijzigen zonder de nachtmerrie van het verplaatsen van bronbeheeritems te hoeven doormaken rond en irriteert de rest van je team.


Antwoord 14, autoriteit 4%

Maak dan een lege oplossing
open .sln-bestand in een editor
en plaats deze regels code na MinimumVisualStudioVersion

Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9D8C3BB1-AEDB-4757-8559-995D12A4E6D0}"

open de oplossing in vs en je zou dezelfde map eraan moeten toevoegen
nu kun je de map zien en er een project aan toevoegen
je hebt een echte map in Windows en een virtuele in vs

zorg ervoor dat je
de projecten met dat pad gemaakt


Antwoord 15, autoriteit 2%

U kunt echte mappen toevoegen door “Nieuw filter toevoegen” te kiezen voor een Visual Studio-projectbestand. U kunt ook “Nieuw filter toevoegen” doen onder een bestaande map. Nadat de map is gemaakt, hernoemt u deze en voegt u het bron- of headerbestand toe of wat dan ook bij uw project past. Dit is een manier die ik ken waarmee we echte mappen kunnen maken via de Visual Studio IDE.


Antwoord 16

De map die onder de oplossing is gemaakt, is zoals gezegd virtueel. Misschien wordt dit een tijdelijke oplossing genoemd, maar je kunt de map fysiek op schijf maken voordat of wanneer je een nieuw item/project toevoegt en Robert zou een broer of zus van je vader moeten zijn.

ps- bij nader inzien moet ik misschien uitleggen dat “bob is je oom” betekent dat je goed/gesorteerd bent.


Antwoord 17

Ik heb hier een oplossing voor (het is niet geweldig, maar het werkt).

  1. Maak een map in uw oplossing (d.w.z. “Contoso”)
  2. Klik met de rechtermuisknop op de oplossing en klik vervolgens op “Map openen in Solution Explorer”
  3. Maak de fysieke map (d.w.z. “Contoso”) in de oplossingsmap
  4. Kopieer/maak bestanden in de fysieke map.
  5. Sleep de bestanden naar de virtuele map in de oplossingenverkenner.

Het is niet geweldig omdat je de bestandsverwijzingen handmatig moet onderhouden, maar het werkt voor mij.

Other episodes