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

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

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

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

13 ответов

Решение

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

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

В 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

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

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

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

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

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

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

Сделать это:

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

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

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

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

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

Чтобы расширить ответ 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, вы можете использовать встроенные переменные окружения таким же образом.

Последняя группа примеров - это набор файлов содержимого, которые мне нужны в конечном выводе. См. /questions/22987884/vklyuchaya-fajlyi-soderzhimogo-vcsproj-nahodyaschiesya-vne-konusa-proekta/22987887#22987887 и другие ответы и ссылки там для получения дополнительной информации об этом.

Дополнительная информация о MSBuild по адресу https://msdn.microsoft.com/en-us/library/bb629388.aspx

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

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

Я думаю, что нашел способ сделать это с помощью 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>

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

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

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

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

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

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

  • Базовые веб-приложения 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>

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

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

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

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

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

Визуальная Студия 2022

Я видел единственное предложенное здесь решение для VS2022, которое подразумевало фактическое копирование существующих физических папок.

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

Я установил расширение с именем Folder To Solution Folder.

После того, как вы добавите его в VS2022, все, что вам нужно сделать, это щелкнуть правой кнопкой мыши свое решение и перейти к «Добавить» в контекстном меню, как показано ниже :

Это не становится проще; для небольших папок это происходит практически мгновенно. Я даже добавил папку с 2000+ файлами (и 19 подпапками): это заняло где-то 2 минуты и мне пришлось нажать ESCнесколько раз, потому что в ней были файлы шрифтов (хотя я не уверен, что это из-за этого расширения), но Оно работало завораживающе.

Это расширение — всего лишь порт на VS2022 из другого расширения .

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

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

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

Другие вопросы по тегам