Как добавить существующее дерево каталогов в проект в Visual Studio?

Вопрос действительно прост. Вместо создания папок в Visual Studio я создаю структуру каталогов для своего проекта в файловой системе. Как мне включить все папки и файлы в проект, сохраняя структуру?

Если я «добавлю существующий файл» в папку с именем Services и перейду к файлу в структуре каталогов. Services> AccountManagement> CreateAccount.cs, в Visual Studio он будет выглядеть следующим образом: Services> CreateAccount.cs. Я не хочу это.

Я уже разработал всю структуру каталогов, поскольку я имитирую наших клиентов-разработчиков, использующих ту же структуру для организации. Как добавить все папки и файлы в проект в Visual Studio? Или я должен делать то, что делает большинство пользователей Microsoft, «мириться с этим» и заново создавать каждую папку через Visual Studio?

25.12.2008 03:17:13
user2864740 23.11.2019 01:52:47
12 ОТВЕТОВ
РЕШЕНИЕ

Вы должны поместить свою структуру каталогов в каталог вашего проекта. А затем нажмите значок «Показать все файлы» в верхней части панели инструментов Solution Explorer. После этого будет добавлен добавленный каталог. Затем вам нужно будет выбрать этот каталог, щелкнуть правой кнопкой мыши и выбрать «Включить в проект».

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

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

1421
8.04.2016 17:04:43
Есть ли способ сделать это с помощью каталога (дерева) вне каталога проекта?
imre 1.05.2011 18:36:17
Есть ли способ сделать это для папки, которая НЕ является подкаталогом, где находится ваш проект? Например: E: \ ProjectX \ project.vcproj включает папку E: \ Common * .cs ??
Matt Connolly 28.02.2012 01:00:05
Почти работает. Я могу видеть дерево каталогов и добавлять несколько файлов, но это не позволит мне добавить целый каталог, включая поддеревья.
ManicBlowfish 9.05.2012 16:44:49
Проблема в том, что он работает ТОЛЬКО, если вы копируете дерево каталогов в вашем визуальном проекте через проводник Windows. Как это сделать, если вы просто хотите сослаться на некоторые папки и файлы, содержащиеся в другом проекте на вашем компьютере?
hico 7.08.2013 10:16:13
Единственный способ сделать это вне проекта - использовать символическую ссылку ... см. Мой ответ: stackoverflow.com/a/26537736/835561
Edyn 23.10.2014 21:25:54

Вы также можете перетащить папку из проводника Windows в окно решения Visual Studio.

76
2.09.2012 23:26:36
Это не работает в моей установке VS 2010 на Vista Ultimate 64 бит.
John Melville 6.04.2011 03:14:54
Нет, не работает и в моей установке VS 2010 на Windows 7.
AH. 15.11.2011 10:30:00
Подтверждение того, что это не работает в VS 2010 (не в режиме администратора), также
David Gardiner 23.03.2012 06:24:05
Я не думаю, что вы, ребята, делаете это правильно. VS 2010 поддерживает перетаскивание папок. Я делаю это все время, чтобы включить мои наборы инструментов. Вы должны убедиться, что вы попали в дерево проекта. Панель решений и сам узел решения не получат отбрасывание. ОС здесь неактуальна, но для сомневающихся я использую 64-битную Windows 7.
Gavin Williams 31.05.2012 04:34:59
«Элементы решения» отличаются от добавления элементов в проект. Элементы решения - это специальная папка в решении VS.
Todd Smith 16.10.2012 00:11:57

Насколько я могу судить, единственный способ сделать это в VS2010 сродни методу перетаскивания. Щелкните правой кнопкой мыши решение, к которому вы хотите добавить проект. В меню приложения будет добавлен пункт ... Открыв это, вы обнаружите, что одним из вариантов является добавление существующего проекта в решение.

В открывшемся диалоговом окне перейдите к папке, содержащей файл проекта для решения, и выберите его. VS, как часть импорта этого файла проекта, также импортирует весь каталог и, я полагаю, любые подчиненные каталоги, которые являются частью этого проекта.

Поскольку для этого требуется существующий файл проекта, невозможно будет импортировать дерево каталогов, пока это дерево не будет преобразовано в проект.

0
29.04.2013 20:04:47

Копировать и вставить .

Чтобы добавить папку, все подкаталоги и файлы, мы также можем скопировать и вставить. Например, мы можем:

  1. Щелкните правой кнопкой мыши в проводнике Windows на папке и скопируйте в папку множество файлов и папок.

  2. Затем в обозревателе Visual Studio Solution щелкните правой кнопкой мыши папку назначения и выберите команду «Вставить».

  3. Необязательно добавить в TFS; Затем в верхней папке щелкните правой кнопкой мыши и войдите в TFS, чтобы проверить все подпапки и файлы.

34
5.06.2017 19:49:46
Это работает для меня, но перетаскивание не работает в VS14 и Windows 10 Pro.
Mona Jalal 5.06.2017 19:47:30
перетаскивание может не работать, если вы не используете VS в качестве администратора
RThomas 4.07.2017 18:49:08

Вы можете использовать символическую ссылку. Это позволяет изменять файл в одном проекте, изменять его в другом (так как на самом деле это тот же файл).

Сделать это:

  1. Откройте командную строку как администратор
  2. mklink / d [имя каталога текущего проекта] [каталог в другом проекте, на который он должен указывать]

У этого есть свои недостатки и подводные камни, но я иногда использую его для дублирующих библиотек, которым нужны разные имена.

Редактировать для Anoop: шаги для добавления в Visual Studio:

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

Это шаги, которые я выполняю и работает для нескольких разных проектов.

18
2.12.2014 14:53:48
Это не работает! символические ссылки не распознаются как папки
Anoop K. Prabhu 1.12.2014 12:48:40
@ Anoop: я добавил шаги, чтобы показать, как я использую этот метод. Пожалуйста, попробуйте.
Edyn 2.12.2014 14:54:24
Работает! Я пытался создать ярлык, щелкнув правой кнопкой мыши папку, а не используя командную строку, и поэтому он не работал. Следующие шаги, описанные выше, исправили проблему. Спасибо
Anoop K. Prabhu 3.12.2014 09:26:33
Примечание: mklink не будет работать в файловой системе FAT. Это для NTFS.
Adrian 29.12.2014 11:38:38
Контроль над исходным кодом вызовет хаос с символическими ссылками. Git нужны права администратора или просто проверяет файл.
CAD bloke 10.01.2016 00:33:43

В Visual Studio 2013 я не мог заставить «Включить в проект» работать при щелчке правой кнопкой мыши по папке. То, что сработало, - это расширение папки, выбор всех файлов и выбор «Включить в проект». Это было довольно утомительно, так как вы должны делать каждую папку одну за другой (но, по крайней мере, вы можете сделать все файлы в каждой папке за один раз), и кажется, что для сохранения пути к файлу (вы можете увидеть это, просмотрев свойства файла и глядя на «Относительный путь» вариант.)

Я надеюсь использовать это для развертывания некоторых файлов данных в проекте установщика Visual Studio, и он, похоже, выбирает включенные файлы и сохраняет их пути.

2
17.01.2015 15:06:01

В 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

52
4.04.2020 15:14:22
Я нашел это полезным, потому что тогда я мог бы включить один тег «всегда копировать при сборке» вместо необходимости аннотировать каждый отдельный файл (как это было в принятом ответе)
Gordon Bean 3.12.2016 00:19:13
ИМО один из самых полезных ответов здесь.
Sinjai 21.08.2017 20:27:50
Где это добавлено? Как добраться до представления XML в VS?
Matthew Dean 28.01.2019 19:22:23
Это лучшее решение, когда вы хотите добавить большую иерархическую папку, когда Visual Studio не отвечает и зависает.
Gowtham Alan 29.05.2019 09:11:01
Это позор для команды Microsoft VS
Solow Developer 6.09.2019 13:26:29

Чтобы расширить ответ Yuchen , вы можете включить файлы и пути в качестве ссылки. Это не то же самое, что добавление существующих элементов, потому что это не делает дополнительную копию в структуре папок вашего проекта. Это полезно, если вы хотите, чтобы одна каноническая папка / файл и т. Д. Использовалась во многих разных местах, но вы хотите сохранить только одну версию / копию.

Вот пример того, что вы можете добавить в *.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

11
21.08.2017 23:30:09
Это должен быть ответ!
Jurijs Kastanovs 7.12.2018 06:30:42

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

Вот пример файла проекта.

<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>
4
31.01.2018 17:29:50

В Visual Studio 2017, вы можете переключаться между Solution View и Folder View вперед и назад. Я думаю, что это лучший вариант, потому что он будет держать решение чище. Я использую это для редактирования .gitignore, .md файлов и т. Д.

Представление решения и представление папки

13
14.03.2018 14:06:33
Вопрос в том, как добавить существующую папку в решение, а не просто просматривать папки.
CShark 1.08.2018 10:18:20
Это действительно хороший вариант, чтобы увидеть реальную структуру, открыть папку в проводнике и т. Д., Но, к сожалению, вы не можете добавить существующее дерево папок из представления папок. Это возможно только в представлении решения, как его описал Гант .
Matt 2.08.2018 14:49:29

Я не нашел ответа на мое удовлетворение, поэтому я понял сам.

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

Предположим, что это структура:

/ Корень / projA / SRC

/ Корень / projA / включает в себя

/ Корень / projB / SRC

/ Корень / projB / включает в себя

/ Корень / yourProj / SRC

/ Корень / yourProj / включает в себя

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

  9. Если он не находит projA / includes, то щелкните правой кнопкой мыши проект, выберите «Свойства».

  10. Перейдите к «C / C ++». Отредактируйте «Дополнительные каталоги включения», добавьте ваш projA / include как таковой «../projA/includes», относительный путь.

Одно предостережение: если есть дублированные файлы include / header, «исключить из проекта» в «заголовочном файле» действительно не работает. Это ошибка в VS.

0
14.02.2019 18:41:44

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

.csprojФайл формата SDK в настоящее время работает со следующими типами проектов :

  • Проекты библиотеки классов

  • Консольные приложения

  • Базовые веб-приложения ASP.NET

  • .NET Core проекты любого типа

Чтобы использовать новый формат, создайте новый проект .NET Core или .NET Standard. Поскольку шаблоны не были обновлены для полной версии .NET Framework даже в Visual Studio 2019, для создания библиотеки классов .NET выберите шаблон стандартной библиотеки .NET, а затем отредактируйте файл проекта, чтобы выбрать нужную версию платформы ( новый стиль проекта формата можно редактировать в Visual Studio - просто щелкните правой кнопкой мыши проект в обозревателе решений и выберите «Редактировать файл проекта»). Например:

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

Дальнейшее чтение:

0
26.06.2019 23:03:47