Папка решений Visual Studio как настоящие папки
У меня есть решение Visual Studio. В настоящее время это пустое решение (= нет проектов), и я добавил несколько папок с решениями.
Папки решений кажутся только "виртуальными папками", потому что они на самом деле не создаются в файловой системе, а файлы внутри папок решений просто находятся в той же папке, что и файл.sln.
Есть ли параметр, который я пропустил, который говорит Visual Studio обрабатывать папки решений как "настоящие" папки, то есть создавать их в файловой системе и перемещать в них файлы, когда я перемещаю их внутри решения в одну из этих папок?
Редактировать: Спасибо. Собираюсь сделать предложение для VS2010 тогда:)
18 ответов
Никаких специальных настроек. Я не думаю, что это поддерживается.
Вы можете создавать реальные папки в "проекте" внутри решения, но не в самом решении.
Существует обходной путь, который на самом деле ведет себя как ожидалось.
- Добавьте новый или существующий веб-сайт в решение. (Я обычно создаю новый.)
- Просто убедитесь, что он создан внутри папки вашего решения. (Иногда я даже создаю "ссылку" на внешнюю папку, например, "Документы" или "Маркетинг" на общем сетевом ресурсе. В этом случае Git, конечно, игнорирует ее.)
- Обязательно зайдите в настройки "Project" или Configuration Manager, чтобы исключить этот "Web-сайт" из Build and Deploy!
Готово. Теперь Solution Explorer будет отражать любые изменения в файловой системе и наоборот (включая подпапки).
Я (скучаю) использую его для спецификаций, документов, PM и некоторых сценариев DevOps, которые делятся внутри команды. Легко выбрать, что включать в систему контроля версий или нет, и (если настроено правильно) не конфликтует со сборкой.
Я знаю, что эта функция не предназначена для этого варианта использования, но за исключением, возможно, вводящей в заблуждение иконки "Проект", я не нашел никаких недостатков в этом хаке. И все же есть случаи использования, когда классические (виртуальные) Папки решений, которые предоставляет VS, вписываются в картину. Как вы думаете?
В Visual Studio 2017 щелкните значок "Решения и папки" в окне обозревателя решений. Эта кнопка переключает виртуальное представление "решение" в "представление источника", которое соответствует макету папок и файлов в файловой системе. Когда вы добавляете новую папку, она физически создается в ожидаемом месте. ,
Выбранный ответ предполагает, что можно будет использовать реальные проекты вместо папок решений, но на самом деле не объясняет как. Я предполагаю, что то, что я описываю здесь, возможно, наименее неуклюжий способ достижения этого...:-P
Проблема с обычными файлами проекта заключается в том, что они в конечном итоге будут скомпилированы MSBUILD
, И если вы хотите иметь проект, который содержит только не компилируемые файлы, это будет проблемой.
Но некоторое время назад Visual Studio представила новый тип проекта: Shared Project (расширение.shproj). Этот тип проекта не компилируется по умолчанию, но только тогда, когда (и только если) на него ссылается другой проект.
Таким образом, одна из хитростей здесь заключается в использовании общих проектов вместо папок решений. Очевидно, что можно добавить общий проект, на который никогда не ссылается ни один другой проект, то есть мы можем избежать проблемы, представленной выше.
Затем с помощью <None Include="**/*" />
Предложение в файле.shproj, мы можем сделать так, чтобы оно автоматически отражало любые новые файлы и / или подпапки.
Так что в основном сделайте это:
- Создайте новую папку в вашем решении.
- Добавьте новый файл.shproj в корень этой новой папки.
- Ссылка на новый.shproj в вашем решении.
Например, в моем случае я создал DockerDev.shproj, поэтому я могу сгруппировать некоторые связанные с докером сценарии, которые мы запускаем только на наших машинах разработки:
<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="**/*" />
</ItemGroup>
</Project>
Этот файл.shproj будет отслеживать любой файл в любой подпапке этого нового DockerDev
папка в моем решении.
Насколько я мог видеть, это решение во многом похоже на то, что запрашивал OP: оно будет работать как некомпилируемая ссылка на папку и автоматически будет отражать любые изменения, внесенные в нее.
Вы можете просто синхронизировать свой новый уровень вложенности папки решения, а также имя с фактической папкой файловой системы, и это работает как шарм!
- Создайте актуальную папку
- Создайте папку решения с тем же именем
- Поместите в него свой проект
- (в обозревателе решений) - щелкните правой кнопкой мыши ту же папку
- Добавить => Существующий проект
Сара Форд внесла Макро, чтобы добавить это. В Visual Studio 2010, если вы откроете Macro Explorer, вы увидите макрос с именем "GenerateSlnFolderOnDirStructure". Это позволит автоматизировать создание папок решений и добавить файлы.
Папка в папку с решениями Сесилия Вирен - CeciliaSHARP
Устраните необходимость добавления нескольких файлов в папку решения. Просто используйте контекстное меню для решения и чуть ниже опции создания новой папки решения, теперь вы найдете "Добавить папку как папку решения". Это создаст папку решения с тем же именем, которое вы выбрали, и добавит элементы из этой папки в папку решения. Это не будет перемещать файлы на диске.
Для C# в Visual Studio 2019 я использовал этот способ ( похоже, похож на этот ответ, но это не сработало, по крайней мере, в решениях C# )
- В обозревателе решений нажмите
- Выбирать
folder view
- Вы можете добавить в решение отдельные папки
- Чтобы вернуться к обычному виду обозревателя решений, просто нажмите
switch views
снова и выберите решение.
Кажется, есть ограничение на использование этого способа (комментарий от @montonero):
... просто откройте решение с несколькими проектами и попробуйте переместить проекты в некоторые другие реальные папки через представление папок. Проблема в том, что VS не обновляет пути к проектам в файле решения.
Нет, это не поддерживается Как вы и подозревали, папки решений - это просто виртуальные подстроки в файле.sln, не имеющие отношения к файловой системе.
Создайте пустое решение, затем откройте файл .sln в редакторе и поместите эти строки кода после MinimumVisualStudioVersion.
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9D8C3BB1-AEDB-4757-8559-995D12A4E6D0}"
откройте решение в vs, и вы должны добавить к нему ту же папку, теперь вы можете увидеть папку и добавить в нее проект, у вас есть настоящая папка в Windows и виртуальная в vs
убедитесь, что вы создали проекты с этим путем
Я сам хотел эту функцию несколько раз, но, в конце концов, вы действительно НЕ хотите возможности сделать это. Думайте о своем решении (файле) как о корне веб-приложения, а о папках решения - как о виртуальных каталогах (буквально и функционально). Содержимое веб-виртуального каталога может физически находиться на другом сервере. Visual Studio запутала концепцию папок решения, позволяя создавать новые файлы внутри папки. Вы должны всегда "Добавить существующий" при добавлении контента. Когда вы добавляете существующий, он создает ссылку на исходное местоположение файла.
Но по той причине, что вы не хотите, чтобы папки решений вели себя как "физические" папки, это потому, что макет вашего решения не обязательно использует то же соглашение, что и макет управления исходным кодом. Папки решений позволяют вам настроить иерархию ваших проектов так, чтобы вы могли группировать проекты и элементы по своему усмотрению, а затем решить, что вам это не нравится, и изменить их снова, не проходя через кошмар перемещения движущихся элементов управления источниками. вокруг и раздражает остальную часть вашей команды.
Примечание: Да, это возможно, вы можете создать папку в корневом каталоге, но она немного сложнее....
Прилагая дополнительные усилия, вы можете сделать это. Как? Давайте следовать за шагом--
- 1-Создать папку, например: "новая папка" в корне (где находится ваш файл.sln).
- 2. Скопируйте и вставьте свои проекты в папку.
- 3. зайдите в свой файл sln и найдите перемещенные проекты и добавьте новую папку \ в адрес перемещенного проекта.
- 4. Сохраните файл sln.
- 5. Откройте ваш проект и зафиксируйте репозиторий в git или около того...
6. Возьмите репозиторий на свежем месте.
Вы сделали...
если вы все еще не видите свою папку -----
- 1. Добавьте папку с решениями xyz.
- 2. Откройте файл sln и измените имя папки на имя вашей папки.
Поздравляю, вы сделали..
Если у вас возникнут проблемы, просто напишите мне о помощи..
Создайте "Папку решения". Это создаст логическую папку, но не физическую. Щелкните правой кнопкой мыши папку решения и откройте диалоговое окно нового проекта. Но прежде чем нажать кнопку ОК, вы должны изменить местоположение проекта на нужную вам физическую папку, и VS создаст его и поместит проект внутрь.
Visual Studio не поддерживает это. Я сделал расширение, которое делает нечто подобное для VS2013, хотя. Он сопоставляет папки решений с физическими папками на вашем жестком диске, хотя сопоставление осуществляется одним способом (от жесткого диска до решения). Это означает, что содержимое папки решения будет отражать содержимое папки жесткого диска, а не иначе.
При этом расширение может все еще быть полезным. Он поддерживает сопоставление папок решения с физическими папками, фильтрацию файлов и каталогов на основе регулярных выражений и запоминание сопоставлений в вашем файле.sln. Свойства не являются навязчивыми, поэтому разработчики без расширения могут по-прежнему открывать sln и не могут быть затронуты.
Размещено в галерее визуальной студии: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd
Редактировать: загружен в bitbucket. Теперь с открытым исходным кодом. Лицензия MIT. https://bitbucket.org/LSS_NorthWind/physical-solution-folders
Вы можете добавить реальные папки, выбрав "Добавить новый фильтр" для файла проекта Visual Studio. Вы также можете сделать "Добавить новый фильтр" в существующей папке. Как только папка будет создана, переименуйте ее и добавьте исходный файл или файл заголовка, или в зависимости от того, что подходит вашему проекту. Это один из известных мне способов, который позволяет нам создавать реальные папки через Visual Studio IDE.
Папка, созданная под решением, будет виртуальной, как сказано. Возможно, это можно назвать обходным путем, но вы можете физически создать папку на диске либо до, либо при добавлении нового элемента / проекта, и Роберт должен быть братом вашего отца.
PS При ближайшем рассмотрении, может быть, я должен объяснить, "Боб твой дядя" означает, что вы хорошо / отсортировано.
Да, это возможно в Visual Studio 2019 для проекта
Хотя это старая тема, я добавлю свой ответ, потому что у меня была такая же проблема, и я искал решение, но казалось, что все на 100% уверены, что это невозможно сделать. Поэтому я начал экспериментировать с VS 2019, перепробовал множество настроек и в конце концов нашел выход.
1 кнопка: D
Вам нужно всего лишь нажать 1 кнопку -
Show All Files
, и вы увидите физическую структуру вашего Решения Visual Studio:
Теперь вы можете добавлять в проект файлы и папки, и они будут добавлены в файловую систему (физически).
Щелкните свой проект правой кнопкой мыши →
Add
→
Обратите внимание, что параметр изменен с
New Filter
к
New Folder
Моя рекомендация для C++
- Создайте корневую папку внутри каталога вашего проекта, которая будет содержать все, что связано с приложением (код, заголовки, данные, библиотеки ...). Я называю это
- Добавьте вложенные папки, как вы хотите структурировать свой код. Я предпочитаю следующий макет :
include
,src
,data
,libs
, так далее
- Теперь настройте Visual Studio для распознавания этих папок как каталогов заголовков и исходных кодов.
- Щелкните свой проект в обозревателе решений. Обратите внимание, в моем случае это
CrazyDemo
, не
Solution 'CreazyDemo' (1 of 1 project)
- Перейдите в меню свойств проекта: →
Properties
- Открыть
Configuration Properties
→VC++ Directories
вкладка - Редактировать
Include Directories
и установить на$(ProjectDir)/Project/include;$(IncludePath)
- Редактировать
Library Directories
и установить на$(ProjectDir)/Project/libs;$(LibraryPath)
- Редактировать
Source Directories
и установить на$(ProjectDir)/Project/src;$(SourcePath)
- Щелкните свой проект в обозревателе решений. Обратите внимание, в моем случае это
- Вы можете использовать эту опцию, если хотите сосредоточиться на 1 проекте. Просто щелкните папку правой кнопкой мыши и нажмите
Scope to This
- Обратите внимание, что после этого действия, чтобы открыть
Project Properties
вам нужно щелкнуть любой из файлов вашего проекта (например,main.cpp
в примере), а затем щелкните редактируемую клиентскую область (например, когда вы хотите изменить код), и только после этого вы сможете увидеть
Project
→CrazyDemo Properties
вариант. [Visual Studio - безумие 🤦♂️]
- Обратите внимание, что после этого действия, чтобы открыть
Наконец, у вас может быть такой проект
У меня есть немного обходного пути для этого (это не здорово, но это работает).
- Создайте папку в своем решении (например, "Contoso")
- Щелкните правой кнопкой мыши решение и выберите "Открыть папку в обозревателе решений".
- Создайте физическую папку (например, "Contoso") в каталоге решений
- Копировать / создавать файлы в физической папке.
- Перетащите файлы в виртуальную папку в обозревателе решений.
Это не очень хорошо, потому что вам нужно будет вручную поддерживать ссылки на файлы, но это работает для меня.