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

StackOverflow https://stackoverflow.com/questions/392473

  •  23-08-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

enter image description here

enter image description here

Другие советы

Вы также можете перетащить папку из Проводник Виндоус в окно решения 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 щелкните правой кнопкой мыши папку назначения и нажмите «Вставить».

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

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

Сделать это:

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

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

Редактировать для Анупа:Шаги по добавлению в Visual Studio:

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

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

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

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

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

Solution View and Folder View

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

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

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

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

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

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

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

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

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

/root/projA/src

/root/projA/включает

/root/projB/src

/root/projB/включает

/root/вашПродж/src

/root/вашПродж/включает

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

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

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

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

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

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

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

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

  • Веб-приложения ASP.NET Core

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top