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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

В 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

Ответ 4

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

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

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

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

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

Ответ 5

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

Для этого:

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

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

Изменить для Anoop: Шаги для добавления в Visual Studio:

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

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

Ответ 6

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

Последняя группа примеров - это набор файлов содержимого, которые мне нужны в конечном выводе. См. fooobar.com/questions/14649/... и другие ответы и ссылки там для получения дополнительной информации об этом.

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

Ответ 7

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

Solution View and Folder View

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

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

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

Ответ 11

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

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

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

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

Ответ 12

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>

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