Jak dodać istniejące drzewo katalogów do projektu w Visual Studio?

824

Problem jest naprawdę prosty. Zamiast tworzyć foldery w Visual Studio, tworzę strukturę katalogów dla mojego projektu w systemie plików. Jak zawrzeć wszystkie foldery i pliki w projekcie, zachowując strukturę?

Jeśli dodam istniejący plik do folderu o nazwie Usługi i przejdę do pliku w strukturze katalogów .. Usługi> Zarządzanie kontem> CreateAccount.cs, pojawi się on w Visual Studio w następujący sposób: Usługi> CreateAccount.cs. Nie chcę tego.

Opracowałem już całą strukturę katalogów, ponieważ naśladuję programistów naszych klientów używających tej samej struktury do organizacji. Jak dodać wszystkie foldery i pliki do projektu w Visual Studio? Czy też muszę robić to, co robi większość użytkowników Microsoft, „pogodzić się z tym” i odtwarzać każdy folder za pomocą Visual Studio?

Brian Leahy
źródło

Odpowiedzi:

1438

Musisz umieścić swoją strukturę katalogów w katalogu projektu. A następnie kliknij ikonę „Pokaż wszystkie pliki” w górnej części przybornika Solution Explorer. Następnie pojawi się dodany katalog. Następnie musisz wybrać ten katalog, kliknąć prawym przyciskiem myszy i wybrać „Uwzględnij w projekcie”.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Gant
źródło
150
Czy można to zrobić z katalogiem (drzewem) poza katalogiem projektu?
imre
2
Czy istnieje sposób, aby to zrobić dla folderu, który NIE jest podkatalogiem, w którym znajduje się Twój projekt? tj .: Czy E: \ ProjectX \ project.vcproj dołącz folder E: \ Common * .cs ??
Matt Connolly,
4
Prawie działa. Widzę drzewo katalogów i dodaję wiele plików, ale nie pozwoli mi to dodać całego katalogu, w tym drzewek podrzędnych.
ManicBlowfish
5
Problem polega na tym, że DZIAŁA TYLKO, jeśli skopiujesz drzewo katalogów w projekcie Visual za pomocą Eksploratora Windows. Jak to zrobić, jeśli chcesz po prostu odwoływać się do niektórych folderów i plików zawartych w innym projekcie na komputerze?
hico
5
Jedyny sposób, w jaki wiem, że mogę to zrobić poza projektem, to użycie dowiązania symbolicznego ... patrz moja odpowiedź: stackoverflow.com/a/26537736/835561
Edyn
77

Możesz także przeciągnąć i upuścić folder z Eksploratora Windows do okna rozwiązania Visual Studio.

Todd Smith
źródło
14
To nie działa w mojej instalacji VS 2010 na Vista Ultimate 64 bit.
John Melville,
13
Nie, nie działa również w mojej instalacji VS 2010 w systemie Windows 7.
AH.
9
Potwierdzenie tego nie działa również w VS 2010 (tryb nieadministracyjny)
David Gardiner
9
Nie sądzę, że dobrze to robicie. VS 2010 obsługuje przeciąganie i upuszczanie folderów. Robię to cały czas, aby dołączyć moje zestawy narzędzi. Musisz upewnić się, że wpadniesz do drzewa projektu. Panel rozwiązania i sam węzeł rozwiązania nie otrzymają upuszczenia. System operacyjny nie ma tu znaczenia, ale dla wątpiących używam 64-bitowego systemu Windows 7.
Gavin Williams
4
„Elementy rozwiązania” różnią się od dodawania elementów do projektu. Elementy rozwiązania są specjalnym folderem w ramach rozwiązania VS.
Todd Smith
53

W Visual Studio 2015 tak to robisz.

Jeśli chcesz automatycznie dołączyć wszystkie pliki potomne poniżej określonego folderu:

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

Można to ograniczyć, aby uwzględnić tylko pliki w określonej ścieżce:

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

Lub nawet tylko pliki z określonym rozszerzeniem:

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

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

Yuchen Zhong
źródło
3
Uznałem to za pomocne, ponieważ mogłem wtedy dołączyć pojedynczy tag dla „zawsze kopiuj zawsze w kompilacji”, zamiast potrzeby adnotowania każdego pojedynczego pliku (jak miało to miejsce w zaakceptowanej odpowiedzi)
Gordon Bean
3
IMO jedna z najbardziej przydatnych odpowiedzi tutaj.
Sinjai,
Gdzie to jest dodane? Jak przejść do widoku XML w VS?
Matthew Dean
1
jest to najlepsze rozwiązanie, jeśli chcesz dodać folder dużej hierarchii, gdy program Visual Studio nie odpowiada i nie można się zawiesić.
Gowtham Alan
1
Szkoda zespołowi Microsoft VS
dejjub-AIS
33

Kopiuj i wklej .

Aby dodać folder, wszystkie podkatalogi i pliki możemy również skopiować i wkleić. Na przykład możemy:

  1. Kliknij prawym przyciskiem myszy w Eksploratorze Windows na folder i Kopiuj na folder z wieloma plikami i folderami.

  2. Następnie w Eksploratorze rozwiązań Visual Studio kliknij prawym przyciskiem myszy folder docelowy i kliknij wklej.

  3. Opcjonalnie dodaj do TFS; Następnie w górnym folderze kliknij prawym przyciskiem myszy i zaloguj się do TFS, aby zarejestrować wszystkie podfoldery i pliki.

Catto
źródło
To działało dla mnie, ale przeciąganie i upuszczanie nie działało w VS14 i Windows 10 pro.
Mona Jalal
1
przeciąganie i upuszczanie może nie działać, chyba że używasz VS jako administrator
RThomas
18

Możesz użyć dowiązania symbolicznego. Powoduje to, że modyfikowanie pliku w jednym projekcie powoduje modyfikację w drugim (ponieważ w rzeczywistości jest to ten sam plik).

Aby to zrobić:

  1. Otwórz monit cmd jako administrator
  2. mklink / d [nazwa katalogu bieżącego projektu] [katalog w innym projekcie powinien wskazywać]

Ma to swoje wady i pułapki, ale czasami używam go do zduplikowanych bibliotek, które potrzebują różnych nazw.

Edycja dla Anoop: kroki dodawania do Visual Studio:

  1. Utwórz link w folderze projektu, wykonując powyższe kroki.
  2. W Visual Studio ... wybierz projekt w Eksploratorze rozwiązań.
  3. W górnej części Solution Explorer ... kliknij przycisk Pokaż wszystkie pliki (może być konieczne dwukrotne kliknięcie, jeśli jest już aktywny).
  4. Link będzie teraz wyświetlany w twoim projekcie ... kliknij prawym przyciskiem myszy i wybierz Uwzględnij w projekcie.

Są to kroki, które podążam i działają dla kilku różnych projektów.

Edyn
źródło
To nie działa! dowiązania symboliczne nie są rozpoznawane jako foldery
Anoop K. Prabhu
1
@Anoop: Dodałem kroki, aby pokazać, jak korzystam z tej metody. Spróbuj.
Edyn
1
To działa! Próbowałem utworzyć skrót, klikając folder prawym przyciskiem myszy, zamiast używać wiersza polecenia i dlatego nie działał. Postępując zgodnie z krokami opisanymi powyżej naprawiono problem. Dzięki
Anoop K. Prabhu,
1
Uwaga: mklink nie będzie działał w systemie plików FAT. To jest dla NTFS.
Adrian
Kontrola źródła spowoduje spustoszenie w linkach symbolicznych. Git potrzebuje uprawnień administratora lub po prostu sprawdza plik.
CAD bloke
13

W programie Visual Studio 2017 można przełączać się między widokiem rozwiązania a widokiem folderów tam iz powrotem. Myślę, że jest to lepsza opcja, ponieważ pozwoli utrzymać czystość rozwiązania. Używam tego do edycji plików .gitignore, .md itp.

Widok rozwiązania i widok folderu

Siavash Mortazavi
źródło
5
Pytanie dotyczy tego, jak dodać istniejący folder do rozwiązania, a nie tylko przeglądać foldery.
CShark
1
Jest to naprawdę dobra opcja, aby zobaczyć rzeczywistą strukturę, otworzyć folder w eksploratorze plików itp. - ale niestety nie można dodać istniejącego drzewa folderów z widoku folderów. Jest to możliwe tylko w widoku rozwiązania, jak to opisał Gant .
Matt
12

Aby rozwinąć odpowiedź Yuchen , możesz dołączyć pliki i ścieżki jako łącze. To nie to samo, co dodawanie istniejących elementów, ponieważ nie tworzy dodatkowej kopii w strukturze folderów projektu. Jest to przydatne, jeśli chcesz, aby jeden kanoniczny folder / plik itp. Był używany w wielu różnych miejscach, ale chcesz zachować tylko jedną jego wersję / kopię.

Oto przykład tego, co możesz dodać do *.csprojpliku, aby utworzyć łącze

<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) to zdefiniowana przeze mnie zmienna środowiskowa Windows, możesz używać wbudowanych zmiennych środowiskowych w ten sam sposób.

Ostatnia grupa przykładów to kilka plików zawartości, których potrzebuję w końcowym wyniku. Więcej informacji na ten temat można znaleźć na https://stackoverflow.com/a/11808911/492 i innych odpowiedziach i linkach.

Więcej informacji o MSBuild na https://msdn.microsoft.com/en-us/library/bb629388.aspx

CAD CAD
źródło
2
To powinna być odpowiedź!
Jurijs Kastanovs,
4

Wydaje mi się, że znalazłem sposób na zrobienie tego za pomocą Compile Include = ". \ Code ***. Cs" Chciałem zawrzeć kod rekurencyjnie w moim folderze Code.

Oto przykładowy plik projektu.

<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
źródło
2

W programie Visual Studio 2013 nie mogłem uruchomić „Uwzględnij w projekcie” po kliknięciu folderu prawym przyciskiem myszy. Zadanie polegało na rozszerzeniu folderu, zaznaczeniu wszystkich plików, a następnie wybraniu opcji „Uwzględnij w projekcie”. Było to dość żmudne, ponieważ musisz zrobić każdy folder jeden po drugim (ale przynajmniej możesz zrobić wszystkie pliki w każdym folderze za jednym razem) i wydaje się, że przechowuje ścieżkę do pliku (możesz to zobaczyć, przeglądając właściwości pliku i patrząc na opcję „Ścieżka względna”).

Mam nadzieję, że wykorzystam to do wdrożenia niektórych plików danych w projekcie Visual Studio Installer i wydaje się, że zbierają one dołączone pliki i zachowują ich ścieżki.

Malvineous
źródło
0

O ile wiem, jedynym sposobem na to w VS2010 jest metoda przeciągnij i upuść. Kliknij prawym przyciskiem myszy rozwiązanie, do którego chcesz dodać projekt. W menu aplikacji będzie znajdować się element Dodaj ... Po otwarciu okazuje się, że jedną z opcji jest dodanie istniejącego projektu do rozwiązania.

W otwartym oknie dialogowym przejdź do folderu zawierającego plik projektu rozwiązania i wybierz go. VS w ramach importowania tego pliku projektu zaimportuje również cały katalog i, zakładam, wszystkie podrzędne katalogi, które są częścią tego projektu.

Ponieważ wymaga to istniejącego pliku projektu, zaimportowanie drzewa katalogów nie będzie niemożliwe, dopóki drzewo to nie zostanie przekonwertowane na projekt.

Fenton Smith
źródło
0

Nie znalazłem odpowiedzi na moje zadowolenie, więc sam się zorientowałem.

Oto odpowiedź, jeśli chcesz dodać zewnętrzne kody źródłowe do swojego projektu i nie chcesz kopiować całych kodów. Mam wiele zależności od innych gitów i są one aktualizowane co godzinę, jeśli nie bardzo. Nie mogę kopiować co godzinę w celu synchronizacji. Oto, co musisz zrobić.

Załóżmy, że jest to struktura:

/ root / projA / src

/ root / projA / obejmuje

/ root / projB / src

/ root / projB / obejmuje

/ root / yourProj / src

/ root / yourProj / obejmuje

  1. Uruchom swoje rozwiązanie VS.
  2. Kliknij prawym przyciskiem myszy nazwę projektu tuż pod rozwiązaniem.
  3. Następnie kliknij „Dodaj”, „Nowy filtr”, wpisz nazwę „projA” dla projA.
  4. Kliknij prawym przyciskiem myszy „projA”, kliknij „Dodaj”, „Nowy filtr”, wprowadź nazwę „src”
  5. Kliknij prawym przyciskiem myszy „projA”, kliknij „Dodaj”, „Nowy filtr”, wprowadź nazwę „zawiera”
  6. Kliknij prawym przyciskiem myszy „projA” / „src”, kliknij „Dodaj”, „Istniejący element”, a następnie przejdź do / root / projA / src, aby dodać wszystkie kody źródłowe lub jeden po drugim dla tych, które chcesz.
  7. Zrób to samo dla „projA” / „obejmuje”
  8. Zrób to samo dla projB. Teraz zewnętrzne / istniejące projekty poza twoim są obecne w twoim rozwiązaniu / projekcie. VS zestawi je razem. Oto sztuczka. Ponieważ projA i projB są wirtualnymi folderami w twoim projekcie, kompilator może nie znaleźć projA / include.

  9. Jeśli nie znajdzie projA / obejmuje, kliknij projekt prawym przyciskiem myszy i wybierz „Właściwości”.

  10. Przejdź do „C / C ++”. Edytuj „Dodatkowe katalogi uwzględniające”, dodaj swoją projA / include jako taką „../projA/include”, ścieżkę względną.

Jedno zastrzeżenie, jeśli istnieją zduplikowane pliki włączania / nagłówka, „wykluczenie z projektu” w „pliku nagłówka” tak naprawdę nie działa. To błąd w VS.

David
źródło
0

Visual Studio 2017 i nowsze wersje obsługują nowy lekki .csprojformat, który stał się znany jako „format SDK”. Jedną z kilku zalet tego formatu jest to, że zamiast zawierać listę plików i folderów, które są dołączone , pliki są domyślnie dołączane jako symbole wieloznaczne. Dlatego dzięki temu nowemu formatowi Twoje pliki i foldery - dodane w Eksploratorze lub w wierszu poleceń - będą pobierane automatycznie!

Format SDK .csprojplik współpracuje obecnie z następujących typów projektów :

  • Projekty bibliotek klasowych

  • Aplikacje konsolowe

  • Aplikacje internetowe ASP.NET Core

  • Projekty .NET Core dowolnego typu

Aby użyć nowego formatu, utwórz nowy projekt .NET Core lub .NET Standard. Ponieważ szablony nie zostały zaktualizowane do pełnej wersji .NET Framework, nawet w Visual Studio 2019, aby utworzyć bibliotekę klas .NET, wybierz szablon .NET Standard Library, a następnie edytuj plik projektu, aby celował w wybraną wersję frameworku ( format projektu nowego stylu można edytować w programie Visual Studio - wystarczy kliknąć projekt prawym przyciskiem myszy w Eksploratorze rozwiązań i wybrać „Edytuj plik projektu”). Na przykład:

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

Dalsza lektura:

Stephen Kennedy
źródło