Папка решений Visual Studio как настоящие папки - PullRequest
98 голосов
/ 06 ноября 2008

У меня есть решение Visual Studio. В настоящее время это пустое решение (= нет проектов), и я добавил несколько папок с решениями.

Папки решений кажутся только «виртуальными папками», потому что они на самом деле не создаются в файловой системе, а файлы внутри папок решений просто находятся в той же папке, что и файл .sln.

Есть ли параметр, который я пропустил, который говорит Visual Studio обрабатывать папки решений как "настоящие" папки, то есть создавать их в файловой системе и перемещать файлы в нее, когда я перемещаю их внутри решения в одну из эти папки?

Редактировать: Спасибо. Собираюсь сделать предложение для VS2010 тогда:)

Ответы [ 14 ]

38 голосов
/ 06 ноября 2008

Специальных настроек нет. Я не думаю, что это поддерживается.

Вы можете создавать реальные папки в «проекте» внутри решения, но не в самом решении.

36 голосов
/ 05 мая 2016

Существует обходной путь, который на самом деле ведет себя как ожидалось .

  1. Добавить Новый или Существующий веб-сайт в Решение. (Я обычно создаю новый.)
  2. Просто убедитесь, что он создан внутри папки вашего решения. (Иногда я даже создаю «ссылку» на внешнюю папку, например, «Документы» или «Маркетинг» на общем сетевом ресурсе. В этом случае Git, конечно, игнорирует это.)
  3. Обязательно перейдите в настройки «Project» или Configuration Manager, чтобы исключить этот «Веб-сайт» из Build and Deploy !

Готово. Теперь Solution Explorer будет отражать любые изменения в файловой системе и наоборот (включая подпапки).

Я (скучаю) использую его для спецификаций, документов, PM и некоторых сценариев DevOps, которые используются в команде. Легко выбрать, что включать в систему контроля версий или нет, и (если настроено правильно) не конфликтует со сборкой.

Я знаю, что эта функция не предназначена для этого варианта использования, но, за исключением, возможно, вводящей в заблуждение иконки «Проект», я не нашел никаких недостатков в этом хаке. И все же есть случаи использования, когда классические (виртуальные) Папки решений, которые предоставляет VS, вписываются в картину. Что ты думаешь?

16 голосов
/ 17 января 2018

В Visual Studio 2017 щелкните значок «Решения и папки» в окне обозревателя решений. Эта кнопка переключает из виртуального представления «решение» в «представление источника», которое соответствует макету папок и файлов в файловой системе. Когда вы добавляете новую папку, она физически создается в ожидаемом месте. solutions and folders.

8 голосов
/ 29 августа 2012

Сара Форд внесла Макро, чтобы добавить это. В Visual Studio 2010, если вы откроете Macro Explorer, вы увидите макрос с именем «GenerateSlnFolderOnDirStructure». Это автоматизирует создание папок решений и добавит файлы.

3 голосов
/ 14 апреля 2019

Выбранный ответ предполагает, что можно было бы использовать реальные проекты вместо папок решений, но в действительности не объясняет как. Я предполагаю, что я описываю здесь, возможно, наименее неловкий способ достижения этого ...: -P

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

Но некоторое время назад Visual Studio представила новый тип проекта: Общий проект (расширение .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: оно будет работать как некомпилируемая ссылка на папку и автоматически отображать любые изменения, внесенные в нее.

3 голосов
/ 09 февраля 2017

Примечание: Да, это возможно, вы можете создать папку в корневом каталоге, но она немного сложнее ....

Прилагая дополнительные усилия, вы можете сделать это. Как? Пройдемся по шагу -

  • 1-Создать папку, например: " newfolder " в корневом каталоге (где находится файл .sln).
  • 2. Скопируйте и вставьте свои проекты в папку.
  • 3.go в ваш файл sln, найдите перемещенные проекты и добавьте новую папку \ в адрес перемещенного проекта.
  • 4.Сохранить файл sln.
  • 5.Откройте свой проект и зафиксируйте репозиторий в git или около того ...
  • 6.Создайте хранилище на свежем месте.

    ВЫ сделали ...

если вы все еще не видите свою папку -----

  • 1.Добавить папку решения xyz.
  • 2.Откройте файл sln и измените имя этой папки на имя вашей папки.

Поздравляю, вы сделали ..

Если у вас возникнут какие-либо проблемы, просто напишите мне о помощи ..

3 голосов
/ 27 января 2017

Папка в папку с решениями Сесилия Вирен - CeciliaSHARP

Устраните необходимость добавления нескольких файлов в папку решения. Просто используйте контекстное меню для решения и чуть ниже опции создания новой папки решения. Теперь вы найдете «Добавить папку как папку решения». Это создаст папку решения с тем же именем, которое вы выбрали, и добавит элементы из этой папки в папку решения. Это не будет перемещать файлы на диске.

3 голосов
/ 06 ноября 2008

Нет, это не поддерживается. Как вы и подозревали, папки решений - это просто виртуальные подстроки в файле .sln, не имеющие отношения к файловой системе.

2 голосов
/ 04 мая 2015

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

2 голосов
/ 08 сентября 2014

Я сам хотел эту функцию несколько раз, но в конце концов, вы действительно НЕ хотите иметь возможность сделать это. Думайте о своем решении (файле) как о корне веб-приложения, а о папках решения - как о виртуальных каталогах (буквально и функционально). Содержимое веб-виртуального каталога может физически находиться на другом сервере. Visual Studio запутала концепцию папок решения, позволяя создавать новые файлы внутри папки. Вы должны всегда «Добавить существующий» при добавлении контента. Когда вы добавляете существующий, он создает ссылку на исходное местоположение файла.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...