Folder rozwiązań programu Visual Studio jako rzeczywiste foldery

121

Mam rozwiązanie Visual Studio. Obecnie jest to puste rozwiązanie (= brak projektów) i dodałem kilka folderów rozwiązań.

Foldery rozwiązań wydają się tylko „folderami wirtualnymi”, ponieważ nie są tworzone w systemie plików, a pliki w folderach rozwiązań po prostu znajdują się w tym samym folderze co plik .sln.

Czy istnieje ustawienie, które przeoczyłem, które nakazuje programowi Visual Studio traktowanie folderów rozwiązań jako folderów „prawdziwych”, czyli tworzenie ich w systemie plików i przenoszenie do niego plików, gdy przenoszę je wewnątrz rozwiązania do jednego z tych folderów?

Edycja: dzięki. W takim razie mam zamiar zasugerować VS2010 :)

Michael Stum
źródło
52
To jedno z najbardziej irytujących dziwactw Visual Studio
Andy White
Jak mogę poprawnie poradzić sobie z tym dziwactwem?
hellboy,
Co zabawne, Rider w pewnym sensie ma tę funkcję (ale folder musi znajdować się w tej samej ścieżce co plik .sln, a rzeczywiste odniesienie do folderu nie jest przechowywane w samym pliku .sln
rsenna
Używam VS 2017 i, o ile wiem, MS nie dodało jeszcze funkcji umożliwiającej dodawanie całych folderów do folderu rozwiązania - należy dodać pojedyncze pliki.
Theo

Odpowiedzi:

42

Bez specjalnego ustawienia. Myślę, że nie jest obsługiwany.

Możesz tworzyć prawdziwe foldery w „projekcie” w rozwiązaniu, ale nie w samym rozwiązaniu.

svlists
źródło
1
Wydaje się, że to nadal jest aktualne od VS 2017.
Theo
2
... i VS 2019
whymatter
jedna z najgorszych rzeczy w VS. Dlaczego MS nie zachowuje folderów Sln jako opcji, ale RÓWNIEŻ zezwala na dodawanie rzeczywistych folderów do rozwiązania. Tak denerwujące. System plików działa, po co wymyślać koło na nowo (jako kwadrat).
MemeDeveloper
46

Istnieje obejście, które faktycznie działa zgodnie z oczekiwaniami .

  1. Dodaj nową lub istniejącą witrynę sieci Web do rozwiązania. (Zwykle tworzę nowy.)
  2. Upewnij się tylko, że został utworzony w folderze rozwiązania. (Czasami nawet tworzę „łącze” do folderu zewnętrznego, np. „Dokumenty” lub „Marketing” w udziale sieciowym. W takim przypadku jest to oczywiście ignorowane przez Git).
  3. Pamiętaj, aby przejść do ustawień „Projekt” lub Menedżera konfiguracji, aby wykluczyć tę „witrynę sieci Web” z funkcji kompilowania i wdrażania !

Gotowe. Teraz Eksplorator rozwiązań odzwierciedli wszelkie zmiany w systemie plików i odwrotnie (w tym podfoldery).

(Tęsknię) używam go do specyfikacji, dokumentacji, PM i niektórych skryptów DevOps, które są udostępniane w zespole. Łatwo jest wybrać, co uwzględnić w kontroli źródła, czy nie, i (jeśli skonfigurowano poprawnie) nie powoduje konfliktu z kompilacją.

Wiem, że ta funkcja nie jest przeznaczona do tego przypadku, ale poza być może mylącą ikoną „Projekt” nie znalazłem jeszcze żadnych braków w tym hacku. Nadal istnieją przypadki użycia, w których klasyczne (wirtualne) foldery rozwiązań oferowane przez VS pasują do obrazu. Co myślisz?

Michael
źródło
4
Oto pełne instrukcje: Kliknij rozwiązanie prawym przyciskiem myszy -> „Dodaj” -> „Nowa witryna sieci Web ...” -> (wybrałem opcję „Pusta witryna sieci Web ASP.NET”). Po zmianie lokalizacji nie zapomnij dodać „\ MyName” do ścieżki, w przeciwnym razie kliknięcie „OK” spowoduje po prostu ponowne otwarcie okna dialogowego. Następnie kliknij rozwiązanie prawym przyciskiem myszy -> „Właściwości” -> „Właściwości konfiguracji” -> odznacz „Kompiluj” dla projektu internetowego.
user764754
Czy to nadal działa? używam VS2015, ale to nie działa.
Jan Paolo Go
W VS2017 doskonale tworzy prawdziwy folder, ale ikona witryny internetowej (ciemne kółko) jest wyświetlana w Eksploratorze rozwiązań. Czy ktoś wie, jak to naprawić?
Andrei Karcheuski
Tak, działa w VS2019, ale nadal nie monitoruje zmian w systemie plików. Aby zobaczyć bieżące pliki, trzeba czasami „Odśwież”. Gdyby tylko projekty C # nie były jedynym typem rozwiązania obsługującym nowy, bardziej przejrzysty i bardziej przejrzysty .*projformat oparty na systemie plików .
shannon,
34

W programie Visual Studio 2017 kliknij ikonę „Rozwiązania i foldery” w oknie Eksplorator rozwiązań. Ten przycisk przełącza z wirtualnego widoku „rozwiązania” do „widoku źródła”, który odpowiada układowi folderów i plików w systemie plików. Po dodaniu nowego folderu folder jest fizycznie tworzony w oczekiwanej lokalizacji. rozwiązania i foldery.

OdeToCode
źródło
1
Jest to przydatne, ale w „widoku źródła” utracono wszystkie skróty klawiaturowe z prawym przyciskiem myszy w projekcie, tj. „Zarządzaj pakietami NuGet”.
David Liang
1
Dlaczego tylko rozwiązania lub projekty C ++ zachowują się inaczej w porównaniu z innymi językami?
Friendly Ghost
2
Pomogło mi to, więc utworzyłem folder w widoku folderów, w którym chciałem, a następnie dodałem folder rozwiązania i dodałem projekt jako element podrzędny folderu. To naprawdę nie ma dla mnie sensu, ale ta odpowiedź pomogła mi
hanzolo
1
Właśnie tego chcę. Dzięki!
user1633272
10

Wybrana odpowiedź sugeruje, że byłoby możliwe użycie rzeczywistych projektów zamiast folderów rozwiązań, ale tak naprawdę nie wyjaśnia, jak to zrobić. Myślę, że to, co tu opisuję, jest prawdopodobnie najmniej niezręcznym sposobem osiągnięcia tego ... :-P

Problem ze zwykłymi plikami projektów polega na tym, że ostatecznie zostaną skompilowane przez MSBUILD. A jeśli chcesz mieć projekt, który zawiera tylko niekompilowalne pliki, będzie to problem.

Ale jakiś czas temu Visual Studio wprowadziło nowy typ projektu: Projekt współdzielony (rozszerzenie .shproj). Ten typ projektu nie jest domyślnie kompilowany, ale tylko wtedy, gdy (i tylko wtedy) odwołuje się do niego inny projekt.

Tak więc jedną częścią tej sztuczki jest użycie współdzielonych projektów zamiast folderów rozwiązań . Oczywiście możliwe jest dodanie projektu współdzielonego, do którego nie odwołuje się żaden inny projekt, co oznacza, że ​​możemy uniknąć problemu przedstawionego powyżej.

Następnie, używając <None Include="**/*" />klauzuli w pliku .shproj, możemy automatycznie odzwierciedlić nowe pliki i / lub podfoldery.

Zasadniczo zrób to:

  • Utwórz nowy folder w swoim rozwiązaniu.
  • Dodaj nowy plik .shproj w katalogu głównym tego nowego folderu.
  • Odwołaj się do nowego pliku .shproj w swoim rozwiązaniu.

Na przykład w moim przypadku utworzyłem DockerDev.shproj, więc mogę pogrupować niektóre skrypty związane z dockerem, które uruchamiamy tylko na naszych maszynach programistycznych:

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

Ten plik .shproj będzie śledzić każdy plik w dowolnym podfolderze tego nowego DockerDevfolderu w moim rozwiązaniu.

O ile mogłem zobaczyć, to rozwiązanie działa prawie tak, jak żądał OP: będzie działać jako niekompilowalne odniesienie do folderu i automatycznie odzwierciedli wszelkie wprowadzone w nim zmiany.

rsenna
źródło
Z mojego doświadczenia wynika, że ​​pojawia się okrucieństwo, gdy niczego nie podejrzewający członek zespołu dotknie jakichkolwiek właściwości pliku; po czym w okienku nawigacji pojawiają się zduplikowane pliki. W pewnych warunkach każdy plik kończy się wyliczeniem w pliku .proj, po czym następuje brzydota. Chociaż nie lubię się poddawać, nadal preferuję podejście „Dodaj istniejącą witrynę internetową”.
shannon,
@shannon Nigdy nie doświadczyłem zachowania, o którym wspominasz, ale „brak dowodów nie jest dowodem nieobecności”, więc jest to. Ale na co dzień korzystam ze wspólnych projektów, więc myślę, że to też się liczy. Jeśli chodzi o projekty witryn internetowych (WSP), mogą one również działać, myślę, że dawno ich nie używam.
rsenna
8

Sara Ford przesłała makro, aby to zrobić. W programie Visual Studio 2010 po otwarciu Eksploratora makr zobaczysz makro o nazwie „GenerateSlnFolderOnDirStructure”. Zautomatyzuje to tworzenie folderów rozwiązań i dodawanie plików.

SwampyFox
źródło
6

Folder To Solution Folder Autor: Cecilia Wirén - CeciliaSHARP

Pozbądź się kłopotów z dodawaniem kilku plików do folderu rozwiązania. Wystarczy skorzystać z menu kontekstowego rozwiązania, a tuż pod opcją tworzenia nowego folderu rozwiązania znajduje się teraz „Dodaj folder jako folder rozwiązania”. Spowoduje to utworzenie folderu rozwiązania o takiej samej nazwie, jak wybrana, i dodanie elementów w tym folderze do folderu rozwiązania. Nie spowoduje to przeniesienia plików na dysku.

ryan
źródło
3

Nie, to nie jest obsługiwane. Jak podejrzewasz, foldery rozwiązań to po prostu wirtualne pozycje podrzędne w pliku .sln, nie mające nic wspólnego z systemem plików.

Alan
źródło
3

Visual Studio nie obsługuje tego. Zrobiłem jednak rozszerzenie, które robi coś podobnego dla VS2013. Mapuje foldery rozwiązań do folderów fizycznych na dysku twardym, chociaż mapowanie jest jednokierunkowe (z dysku twardego na rozwiązanie). Oznacza to, że zawartość folderu rozwiązania będzie odzwierciedlać zawartość folderu na dysku twardym, a nie na odwrót.

Po usunięciu tego rozszerzenie może nadal być przydatne. Obsługuje mapowanie folderów rozwiązań do folderów fizycznych, filtrowanie plików i katalogów na podstawie wyrażeń regularnych oraz zapamiętywanie mapowań w pliku .sln. Właściwości są nieinwazyjne, więc programiści bez rozszerzenia mogą nadal otwierać sln i nie mają na nie wpływu.

Hostowany w galerii Visual Studio: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd

Edycja: przesłane do bitbucket. Teraz open source. Licencja MIT.https://bitbucket.org/LSS_NorthWind/physical-solution-folders

północny wiatr
źródło
3

Uwaga: tak, jest to możliwe, możesz utworzyć folder w katalogu głównym, ale jest to trochę trudne ....

Dając dodatkowe wysiłki, możesz to zrobić. Jak? Postępujmy zgodnie z krokiem

  • 1-Utwórz folder, np .: „ nowyfolder ” w katalogu głównym (gdzie znajduje się plik .sln).
  • 2. Skopiuj i wklej swoje projekty do folderu.
  • 3. przejdź do pliku sln i znajdź przeniesione projekty i dołącz nowy folder \ w adres przeniesionego projektu.
  • 4.Zapisz plik sln.
  • 5.Otwórz projekt i zatwierdź repozytorium w git lub tak ...
  • 6. Przenieś repozytorium do nowej lokalizacji.

    Skończyłeś ...

jeśli nadal nie możesz zobaczyć swojego folderu -----

  • 1. Dodaj folder rozwiązania xyz.
  • 2. Otwórz plik sln i zmień nazwę folderu na nazwę swojego folderu.

Gratulacje, gotowe ...

Jeśli napotkasz jakiś problem, po prostu napisz do mnie o pomoc

Ankit
źródło
3

Utwórz „folder rozwiązań”. Spowoduje to utworzenie folderu logicznego, ale nie fizycznego. Kliknij prawym przyciskiem myszy folder rozwiązania i otwórz nowe okno dialogowe projektu. Ale zanim klikniesz OK, musisz zmienić lokalizację projektu na żądany folder fizyczny, a VS utworzy go i umieści projekt w środku.

rc21
źródło
1

Możesz dodać prawdziwe foldery, wybierając opcję „Dodaj nowy filtr” dla pliku projektu programu Visual Studio. Możesz także zrobić „Dodaj nowy filtr” w istniejącym folderze. Po utworzeniu folderu zmień jego nazwę i dodaj plik źródłowy lub nagłówkowy lub cokolwiek pasuje do twojego projektu. Jest to jedyny znany mi sposób, który pozwala nam tworzyć prawdziwe foldery za pośrednictwem środowiska IDE programu Visual Studio.

Abhijit K Rao
źródło
Ta funkcja jest specyficzna dla projektów C ++.
Tamir Daniely
To rozwiązanie dotyczy również projektów VS - pytanie dotyczy folderów na poziomie rozwiązania.
Theo
0

Folder utworzony pod rozwiązaniem będzie wirtualny, jak powiedziano. Być może można to nazwać obejściem, ale możesz fizycznie utworzyć folder na dysku przed lub podczas dodawania nowego elementu / projektu, a Robert powinien być rodzeństwem twojego taty.

ps- po bliższym przyjrzeniu się, może powinienem wyjaśnić, że „Bob jest twoim wujem” oznacza, że ​​jesteś w porządku / posortowany.

gołąb
źródło
Czy to ma znaczenie, czy Robert jest bratem twojej matki?
Darrel Lee,
0

Sam chciałem tę funkcję kilka razy, ale koniec końców naprawdę NIE chcesz mieć takiej możliwości. Pomyśl o swoim rozwiązaniu (pliku) jako katalogu głównym aplikacji internetowej i pomyśl o folderach rozwiązań jako o katalogach wirtualnych (dosłownie i funkcjonalnie). Zawartość wirtualnego katalogu WWW może znajdować się fizycznie na innym serwerze. Program Visual Studio zagmatwał koncepcję folderów rozwiązań, umożliwiając tworzenie nowych plików w folderze. Podczas dodawania treści należy zawsze „Dodaj istniejące” . Po dodaniu istniejącego tworzy łącze do lokalizacji źródłowej pliku.

Jednak powodem, dla którego nie chcesz, aby foldery rozwiązań zachowywały się jak foldery „fizyczne”, jest to, że układ rozwiązania niekoniecznie musi korzystać z tej samej konwencji, co układ kontroli źródła. Foldery rozwiązań umożliwiają dostosowanie hierarchii projektów, dzięki czemu można grupować projekty i elementy w dowolny sposób, a następnie zdecydować, że się nie podoba, i zmienić to ponownie bez konieczności przechodzenia przez koszmar przenoszenia elementów kontroli źródła wokół i irytuje resztę zespołu.

Pawła Wielkanoc
źródło
1
To jest właściwa odpowiedź - utwórz plik na dysku w folderze o tej samej nazwie co folder wirtualny, a następnie dodaj plik w VS za pomocą „Dodaj istniejący”.
Richard,
4
Mogli łatwo zaimplementować zarówno wirtualne, jak i fizyczne foldery. Jest to ewidentnie przeoczenie. Zobacz odniesienie: każde inne IDE, kiedykolwiek.
Tamir Daniely,
6
W ogóle nie rozumiem, dlaczego koncepcja katalogów wirtualnych (IIS) ma cokolwiek wspólnego z folderami rozwiązań. Jeśli chodzi o argument kontroli źródła, nie widzę problemu. Dlaczego ruchy plików irytowałyby resztę Twojego zespołu? To powszechna operacja. A dlaczego miałbyś chcieć, aby układ plików w kontroli źródła był inny niż układ fizyczny?
user247702
2
Foldery fizyczne rozwiązanie byłoby łatwiej (choć tylko trochę), aby tworzyć nowoczesne struktury folderów, takich jak NancyFx użytkownika , gdzie wiele projektów należą do kategorii, takich jak src, test, tools, itd. Można by na pewno chcesz, aby tę decyzję na początku projektu do punktu o irytujące zespół, ale dotyczy to większości decyzji architektonicznych.
Eric Eskildsen
3
-1 Mój przypadek jest następujący: czasami chcemy po prostu dodać określone dokumenty do rozwiązania. Nie zostaną zbudowane, ale pozostaną pod kontrolą źródła. Zwykle mamy dla nich specjalny folder. Chciałbym mieć ten folder w moim rozwiązaniu - nie pliki, które zawiera, ale sam folder. Tak, istnieją sposoby obejścia tego ograniczenia, ale nie są one optymalne. Rzeczywiste odniesienie do folderu w rozwiązaniu po prostu zadziała.
rsenna
0

Mam trochę obejścia tego problemu (nie jest świetne, ale działa).

  1. Utwórz folder w swoim rozwiązaniu (np. „Contoso”)
  2. Kliknij prawym przyciskiem myszy rozwiązanie, a następnie kliknij „Otwórz folder w Eksploratorze rozwiązań”
  3. Utwórz folder fizyczny (tj. „Contoso”) w katalogu rozwiązania
  4. Skopiuj / utwórz pliki w folderze fizycznym.
  5. Przeciągnij pliki do folderu wirtualnego w eksploratorze rozwiązań.

To nie jest świetne, ponieważ będziesz musiał ręcznie zarządzać odniesieniami do plików, ale działa dla mnie.

Matthew Layton
źródło