Як додати існуюче дерево каталогів до проекту в Visual Studio?


824

Питання справді просте. Замість створення папок у Visual Studio я створюю структуру каталогів для свого проекту у файловій системі. Як я включаю всі папки та файли до проекту, зберігаючи структуру?

Якщо я "Додати існуючий файл" у папці з назвою "Сервіс" і перейду до файлу в структурі каталогу .. Послуги> Управління рахунком> CreateAccount.cs, він з'явиться у Visual Studio так: Послуги> CreateAccount.cs. Я цього не хочу.

У мене вже розроблена вся структура каталогів, оскільки я імітую наших розробників клієнтів, використовуючи ту саму структуру для організації. Як додати всі папки та файли до проекту у Visual Studio? Або я повинен робити те, що робить більшість користувачів Microsoft, і "миритися з цим" і відтворювати кожну папку через Visual Studio?



Відповіді:


1438

Потрібно помістити структуру свого каталогу у каталог вашого проекту. А потім натисніть значок "Показати всі файли" у верхній частині панелі інструментів Провідник рішень. Після цього буде показано доданий каталог. Потім потрібно вибрати цей каталог, клацнути правою кнопкою миші та вибрати "Включити у проект".

введіть тут опис зображення

введіть тут опис зображення


150
Чи є спосіб це зробити з каталогом (деревом) поза каталогом проекту?
imre

2
Чи є спосіб зробити це для папки, яка НЕ ​​є підкаталогом, де знаходиться ваш проект? тобто: Є E: \ ProjectX \ project.vcproj включають папку E: \ Common * .cs ??
Метт Конноллі,

4
Майже працює. Я бачу дерево каталогів і додаю декілька файлів, але це не дозволить мені додати цілий каталог, включаючи під деревці.
ManicBlowfish

5
Проблема полягає в тому, що воно працює ТОЛЬКО, якщо ви копіюєте дерево каталогів у свій проект Visual через Windows Explorer. Як це зробити, якщо ви просто хочете посилатися на деякі папки та файли, що містяться в іншому проекті на вашому комп'ютері?
hico

5
Тільки так , як я знаю, щоб зробити це зовні проект , використовуючи символічні посилання ... см моя відповідь: stackoverflow.com/a/26537736/835561
Edyn

77

Ви також можете перетягнути папку з Провідника Windows у вікно рішення Visual Studio.


14
Це не працює в моїй установці VS 2010 на Vista Ultimate 64 біт.
Джон Мелвілл

13
Ні, також не працює в моєму встановленні VS 2010 в Windows 7.
АГ.

9
Підтвердження цього не працює і в VS 2010 (не в режимі адміністратора)
David Gardiner

9
Я не думаю, що ви робите це правильно. VS 2010 робить папку підтримки n перетягування. Я роблю це весь час, щоб включати свої набори інструментів. Ви повинні переконатися, що ви потрапили в дерево проекту. Панель рішення та сам вузол рішення не отримають краплі. ОС тут не має значення, але для сумнівів, я використовую Windows 7 64 біт.
Гевін Вільямс

4
"Елементи рішення" відрізняються від додавання елементів до проекту. Елементи рішення - це спеціальна папка всередині рішення VS.
Тодд Сміт

53

У Visual Studio 2015 саме так ви робите.

Якщо ви хочете автоматично включати всі нащадкові файли під певну папку:

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

Це обмеження може включати лише файли у вказаному шляху:

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

Або навіть лише файли із заданим розширенням:

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

Довідка: http://jamesrpatterson.com/blog/automatic-include-in-project-for-visual-studio


3
Я вважаю це корисним, тому що потім міг включити єдиний тег для "копіювання завжди у збірці", а не потрібно анотувати кожен окремий файл (як це було у прийнятій відповіді)
Гордон Бін

3
ІМО - одна з найкорисніших відповідей тут.
Сінджай

Де це додано? Як потрапити до перегляду XML у VS?
Метью Дін

1
це найкраще рішення, коли ви хочете додати велику папку ієрархії, поки Visual Studio не відповідає і не зависає.
Гоутем Алан

1
Соромно команді Microsoft VS
dejjub-AIS

33

Копіювати та вставляти .

Щоб додати папку, всі підкаталоги та файли, ми також можемо скопіювати та вставити. Наприклад, ми можемо:

  1. Клацніть правою кнопкою миші в Провіднику Windows у папці та Копіюйте у папку з багатьма файлами та папками.

  2. Потім у провіднику Visual Studio Solution клацніть правою кнопкою миші папку призначення та натисніть кнопку Вставити.

  3. Необов’язково додати до TFS; Потім у верхній папці клацніть правою кнопкою миші та увійдіть у TFS, щоб перевірити всі підпапки та файли.


Це працювало для мене, але перетягування не працювало у VS14 та Windows 10 pro.
Mona Jalal

1
перетягування може не працювати, якщо ви не працюєте з VS як адміністратор
RThomas

18

Можна використовувати символічне посилання. Це змушує модифікувати файл в одному проекті змінити його в іншому (оскільки це насправді той самий файл).

Зробити це:

  1. Відкрийте підказку cmd як адміністратор
  2. mklink / d [поточна назва каталогу проекту] [каталог в іншому проекті, на який він повинен вказувати]

У цього є свої недоліки та підводні камені, але я використовую це при нагоді для копій бібліотек, які потребують різних назв.

Редагування для Anoop: кроки для додавання до Visual Studio:

  1. Створіть посилання в папці проекту за допомогою описаних вище кроків.
  2. У Visual Studio ... виберіть проект у Провіднику рішень.
  3. Угорі Провідника рішень ... натисніть кнопку Показати всі файли (можливо, потрібно буде натиснути її двічі, якщо вона вже активна).
  4. Тепер посилання відображатиметься у вашому проекті ... клацніть правою кнопкою миші та виберіть Включити у проект.

Це кроки, які я виконую, і працюю над декількома різними проектами.


Це не працює! символьні посилання не розпізнаються як папки
Anoop K. Prabhu

1
@Anoop: я додав кроки, щоб показати, як я використовую цей метод. Спробуйте, спробуйте.
Едін

1
Це працює! Я намагався створити ярлик, клацнувши правою кнопкою миші папку, замість того, щоб використовувати командний рядок, і це не спрацювало. Виконуючи описані вище кроки, вирішено проблему. Спасибі
Anoop K. Prabhu

1
Примітка: mklink не працюватиме у файловій системі FAT. Це для NTFS.
Адріан

Контроль над джерелами пошкодить символічні посилання. Git потребує привілеїв адміністратора або просто перевірки у файлі.
CAD заблокував

13

У Visual Studio 2017 ви перемикаєтесь між переглядом рішення та переглядом папок вперед і назад. Я думаю, що це кращий варіант, оскільки це дозволить зберегти розчин чистішим. Я використовую це для редагування .gitignore, .md файлів тощо.

Перегляд рішення та перегляд папок


5
Питання полягає в тому, як додати до рішення існуючу папку, а не лише для перегляду папок.
CShark

1
Це дійсно хороший варіант, щоб побачити фактичну структуру, відкрити папку в провіднику файлів тощо - але, на жаль, ви не можете додати існуюче дерево папок із подання папок. Це можливо лише з точки зору рішення, як описав його Гант .
Метт

12

Щоб розширити відповідь Юхена , ви можете включити файли та шляхи як посилання. Це не те саме, що додавати існуючі елементи, оскільки це не робить зайву копію в структурі папок вашого проекту. Це корисно, якщо ви хочете, щоб одна канонічна папка / файл тощо використовувалася у багатьох різних місцях, але ви хочете підтримувати лише одну версію / її копію.

Ось приклад того, що ви можете додати до *.csprojфайлу, щоб створити посилання

<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) це змінна середовище Windows, яку я визначив, ви можете використовувати вбудовані змінні середовища таким же чином.

Останній приклад групи - це купа файлів із вмістом, які мені потрібні під час остаточного виводу. Більше про це див. Https://stackoverflow.com/a/11808911/492 та інші відповіді та посилання.

Більше інформації про MSBuild на веб-сторінці https://msdn.microsoft.com/en-us/library/bb629388.aspx


2
Це має бути відповідь!
Юрійс Кастанов

4

Я думаю, що я знайшов спосіб зробити це за допомогою Compile Include = ". \ Code ***. Cs" Я хотів включити код рекурсивно в мою папку Code.

Ось зразок файлу проекту.

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

2

У Visual Studio 2013 я не зміг змусити "Включити в проект" роботу при натисканні правою кнопкою на папку. Що було в роботі - це розширення папки, вибір усіх файлів, а потім вибір "Включити в проект". Це було досить нудно, оскільки вам потрібно робити кожну папку по одній (але принаймні ви можете робити всі файли у кожній папці за один раз), і, схоже, зберігається шлях до файлу (ви можете побачити це, переглядаючи властивості у файлі і переглядаючи варіант "Відносний шлях".)

Я сподіваюся використати це для розгортання деяких файлів даних у проекті Visual Studio Installer, і, здається, підберуть включені файли та збереже їх шляхи.


0

Наскільки я можу сказати, єдиний спосіб зробити це у VS2010 - це схожий з методом перетягування. Клацніть правою кнопкою миші рішення, до якого потрібно додати проект. У меню програми буде додано пункт ... Відкривши це, ви виявите, що одним із варіантів є додавання існуючого проекту до рішення.

У діалоговому вікні, що відкриється, перейдіть до папки, що містить файл проекту, для рішення та виберіть його. VS, як частина імпорту файлу проекту, також імпортує весь каталог, і я припускаю будь-які підпорядковані каталоги, які є частиною цього проекту.

Оскільки для цього потрібен існуючий файл проекту, імпортувати дерево каталогів буде неможливо, поки це дерево не буде перетворене в проект.


0

Я не знайшов відповіді на своє задоволення, тому зрозумів себе.

Ось вам відповідь, якщо ви хочете додати до свого проекту зовнішні вихідні коди та не хочете копіювати цілі коди. У мене багато залежностей від інших gits, і вони оновлюються щогодини, якщо не щомісячно. Я не можу копіювати кожну годину для синхронізації. Ось що вам потрібно зробити.

Припустимо, це структура:

/ root / projA / src

/ root / projA / включає

/ root / projB / src

/ root / projB / включає

/ root / yourProj / src

/ root / yourProj / включає

  1. Почніть ваше рішення VS.
  2. Клацніть правою кнопкою миші назву проекту прямо під рішенням.
  3. Потім натисніть «Додати», «Новий фільтр», введіть назву «projA» для projA.
  4. Клацніть правою кнопкою миші на "projA", натисніть "Додати", "Новий фільтр", введіть назву "src"
  5. Клацніть правою кнопкою миші на "projA", натисніть "Додати", "новий фільтр", введіть назву "включає"
  6. Клацніть правою кнопкою миші "projA" / "src", натисніть "Додати", "існуючий елемент", а потім перейдіть до / root / projA / src, щоб додати всі вихідні коди або один за одним для тих, які ви хочете.
  7. Зробіть те ж саме для "projA" / "включає"
  8. Зробіть те ж саме для projB. Тепер у вашому рішенні / проекті присутні зовнішні / існуючі проекти, що не є вашими. ВС складе їх разом. Ось хитрість. Оскільки projA і projB є віртуальними папками під вашим проектом, компілятор може не знайти projA / include.

  9. Якщо він не знайде projA / include, клацніть правою кнопкою миші проект, виберіть "Властивості".

  10. Перейдіть до "C / C ++". Відредагуйте "Додаткові включення каталогів", додайте свій projA / включайте як такий "../projA/includes", відносний шлях.

Одне застереження, якщо є дублюються файли включення / заголовка, "виключити з проекту" у "файлі заголовка" насправді не працює. Це помилка у VS.


0

Visual Studio 2017 і новіші підтримують новий легкий .csprojформат, який став відомим як "формат SDK". Однією з декількох переваг цього формату є те, що замість того, щоб містити список файлів і папок, які включені , файли за замовчуванням включаються в підстановку. Тому з цим новим форматом ваші файли та папки - додані в Провіднику або в командному рядку - автоматично отримуватимуться!

Формат SDK .csprojфайл в даний час працює з наступними типами проектів :

  • Проекти бібліотечних класів

  • Консольні програми

  • Веб-додатки ASP.NET Core

  • .NET Core проекти будь-якого типу

Щоб використовувати новий формат, створіть новий .NET Core або .NET Standard проект. Оскільки шаблони не оновлювались для повної .NET Framework навіть у Visual Studio 2019, для створення бібліотеки класів .NET виберіть шаблон .NET Standard Library, а потім відредагуйте файл проекту, щоб орієнтуватися на обрану вами версію ( Формат проекту нового стилю можна редагувати всередині Visual Studio - просто клацніть правою кнопкою миші проект у Провіднику рішень та виберіть "Редагувати файл проекту"). Наприклад:

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

Подальше читання:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.