Как добавить существующее дерево каталогов в проект в Visual Studio?
-
23-08-2019 - |
Вопрос
Проблема на самом деле проста.Вместо создания папок в Visual Studio я создаю структуру каталогов для своего проекта в файловой системе.Как включить в проект все папки и файлы, сохранив структуру?
Если я «Добавлю существующий файл» в папку с именем «Службы» и перейду к файлу в структуре каталогов..Службы > AccountManagement > CreateAccount.cs, в Visual Studio он выглядит следующим образом:Службы > CreateAccount.cs.Я не хочу это.
У меня уже есть целая структура каталогов, поскольку я подражаю нашим клиентским разработчикам, использующим ту же структуру для организации.Как добавить все папки и файлы в проект в Visual Studio?Или мне придется делать то, что делает большинство пользователей Microsoft, «мириться с этим» и заново создавать каждую папку через Visual Studio?
Решение
Вам необходимо поместить структуру каталогов в каталог вашего проекта.Затем щелкните значок «Показать все файлы» в верхней части панели инструментов Solution Explorer.После этого появится добавленный каталог.Затем вам нужно будет выбрать этот каталог, щелкнуть правой кнопкой мыши и выбрать «Включить в проект».
Другие советы
Вы также можете перетащить папку из Проводник Виндоус в окно решения 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
Копировать вставить.
Чтобы добавить папку, все подкаталоги и файлы, мы также можем скопировать и вставить.Например, мы можем:
Щелкните правой кнопкой мыши в проводнике Windows папку и скопируйте папку с множеством файлов и папок.
Затем в обозревателе решений Visual Studio щелкните правой кнопкой мыши папку назначения и нажмите «Вставить».
Необязательное добавление в TFS;Затем в верхней папке щелкните правой кнопкой мыши и зарегистрируйтесь в TFS, чтобы проверить все подпапки и файлы.
Вы можете использовать символическую ссылку.Это приводит к тому, что изменение файла в одном проекте приводит к изменению его в другом (поскольку на самом деле это один и тот же файл).
Сделать это:
- Откройте командную строку от имени администратора
- mklink /d [имя текущего каталога проекта] [каталог в другом проекте, на который он должен указывать]
У этого метода есть свои недостатки и подводные камни, но я иногда использую его для дубликатов библиотек, которым нужны разные имена.
Редактировать для Анупа:Шаги по добавлению в Visual Studio:
- Создайте ссылку в папке проекта, выполнив действия, описанные выше.
- В Visual Studio...выберите проект в обозревателе решений.
- В верхней части обозревателя решений...нажмите кнопку «Показать все файлы» (возможно, придется нажать ее дважды, если она уже активна).
- Ссылка теперь будет отображаться в вашем проекте...щелкните правой кнопкой мыши и выберите «Включить в проект».
Это шаги, которым я следую и которые работают для нескольких разных проектов.
Чтобы расширить Ответ Ючена, вы можете включать файлы и пути в качестве ссылки.Это не то же самое, что добавление существующих элементов, поскольку при этом не создается дополнительная копия в структуре папок вашего проекта.Это полезно, если вы хотите, чтобы одна каноническая папка/файл и т. д. использовалась во многих разных местах, но вы хотите поддерживать только одну ее версию/копию.
Вот пример того, что вы можете добавить в *.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
Я думаю, что я нашел способ сделать это с помощью компиляции 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/вашПродж/включает
- Запустите решение VS.
- Щелкните правой кнопкой мыши имя проекта прямо под решением.
- Затем нажмите «Добавить», «Новый фильтр», введите имя «projA» для projA.
- Щелкните правой кнопкой мыши «projA», нажмите «Добавить», «Новый фильтр», введите имя «src».
- Щелкните правой кнопкой мыши «projA», нажмите «Добавить», «Новый фильтр», введите имя «включает».
- Щелкните правой кнопкой мыши «projA»/«src», выберите «Добавить», «Существующий элемент», затем перейдите к /root/projA/src, чтобы добавить все исходные коды или один за другим нужные вам коды.
- Сделайте то же самое для «projA»/«includes».
Сделайте то же самое для projB.Теперь внешние/существующие проекты вне вашего присутствуют в вашем решении/проекте.VS скомпилирует их вместе.Вот трюк.Поскольку projA и projB являются виртуальными папками вашего проекта, компилятор может не найти projA/includes.
Если он не находит projA/includes, щелкните проект правой кнопкой мыши и выберите «Свойства».
- Перейдите к «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>
Дальнейшее чтение: