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

826

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

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

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

Брайан Лихи
источник

Ответы:

1439

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

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

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

Gant
источник
150
Есть ли способ сделать это с помощью каталога (дерева) вне каталога проекта?
Имре
2
Есть ли способ сделать это для папки, которая НЕ является подкаталогом, где находится ваш проект? Например: E: \ ProjectX \ project.vcproj включает папку E: \ Common * .cs ??
Мэтт Коннолли
4
Почти работает. Я могу видеть дерево каталогов и добавлять несколько файлов, но это не позволит мне добавить целый каталог, включая поддеревья.
ManicBlowfish
5
Проблема в том, что он работает ТОЛЬКО, если вы копируете дерево каталогов в вашем визуальном проекте через проводник Windows. Как это сделать, если вы просто хотите сослаться на некоторые папки и файлы, содержащиеся в другом проекте на вашем компьютере?
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 (не в режиме администратора), тоже
Дэвид Гардинер
9
Я не думаю, что вы, ребята, делаете это правильно. VS 2010 поддерживает перетаскивание папок. Я делаю это все время, чтобы включить мои наборы инструментов. Вы должны убедиться, что вы попали в дерево проекта. Панель решений и сам узел решения не получат отбрасывание. ОС здесь неактуальна, но для сомневающихся я использую 64-битную Windows 7.
Гэвин Уильямс
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.
Мона Джалал
1
перетаскивание может не работать, если вы не используете VS в качестве администратора
RThomas
18

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

Сделать это:

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

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

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

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

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

Edyn
источник
Это не работает! символические ссылки не распознаются как папки
Anoop K. Prabhu
1
@ Anoop: я добавил шаги, чтобы показать, как я использую этот метод. Пожалуйста, попробуйте.
Edyn
1
Работает! Я пытался создать ярлык, щелкнув правой кнопкой мыши папку, а не используя командную строку, и, таким образом, он не работал. Следующие шаги, описанные выше, исправили проблему. Спасибо
Anoop K. Prabhu
1
Примечание: mklink не будет работать в файловой системе FAT. Это для NTFS.
Адриан
Контроль над исходным кодом вызовет хаос с символическими ссылками. Git нужны права администратора или просто проверяет файл.
САПР bloke
13

В Visual Studio 2017, вы можете переключаться между Solution View и Folder View вперед и назад. Я думаю, что это лучший вариант, потому что он будет держать решение чище. Я использую это для редактирования .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

CAD CAD
источник
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, и он, похоже, выбирает включенные файлы и сохраняет их пути.

Malvineous
источник
0

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

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

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

Фентон Смит
источник
0

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

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

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

/ Корень / 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.

davidj
источник
0

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>

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

Стивен Кеннеди
источник