Папка Visual Studio Solutions як справжні папки


119

У мене є рішення Visual Studio. Наразі це порожнє рішення (= немає проектів), і я додав кілька папок рішення.

Папки рішення лише здаються "віртуальними папками", оскільки вони насправді не створені у Filesystem і файли всередині папок рішення просто сидять у тій же папці, що і файл .sln.

Чи є налаштування, яке я не помітив, і вказує Visual Studio трактувати папки рішення як "справжні" папки, тобто створювати їх у файловій системі та переміщувати файли до неї, коли я переміщую їх усередині рішення в одну з цих папок?

Редагувати: Спасибі Тоді збираюся внести пропозицію щодо VS2010 :)


52
Це одна з найприємніших примх Visual Studio
Енді Уайт

Як я можу правильно впоратися з цією химерністю?
пекло

Цікаво, що у Rider є така функція (але папка повинна знаходитися на тому ж шляху, що і файл .sln, а фактична посилання папки не зберігається у самому файлі .sln): jetbrains.com/help/rider/Extending_Your_Solution. html
rsenna

Я використовую VS 2017, і наскільки я можу сказати, MS ще не додала функцію, щоб дозволити додавати цілі папки до папки рішення - окремі файли повинні бути додані.
Тео

Відповіді:


43

Ніяких спеціальних налаштувань. Я не думаю, що це підтримується.

Ви можете створювати справжні папки в "проекті" всередині рішення, але не в самому рішенні.


1
Це все ще здається точним станом на VS 2017.
Тео

2
... і VS 2019
чому матер

одна з найгірших речей про В.С. Чому MS не зберігають папки Sln як опцію, але ТАКОЖ дозволяють додавати до рішення папки REAL. Так дратує. Файлова система працює, навіщо винаходити колесо (як квадрат).
MemeDeveloper

46

Існує рішення, яке насправді веде себе так, як очікувалося .

  1. Додавання нового або існуючого веб - сайту для вирішення. (Я зазвичай створюю нову.)
  2. Просто переконайтеся, що він створений всередині вашої папки рішення. (Я іноді навіть створюю "посилання" на зовнішню папку, наприклад, "Документи" або "Маркетинг" на загальній мережі). У цьому випадку Git ігнорує.)
  3. Переконайтесь, що перейдіть до налаштувань "Проекту" або до Менеджера конфігурацій, щоб виключити цей "Веб-сайт" зі створення та розгортання !

Зроблено. Тепер Провідник рішень відображатиме будь-які зміни у файловій системі та навпаки (включаючи вкладені папки).

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

Я знаю, що ця функція не призначена для цього випадку використання, але, окрім, можливо, оманливої ​​піктограми "Project", я ще не знайшов жодних недоліків у цьому злому. І все ж є випадки використання, коли класичні (віртуальні) папки рішення, які надає VS, поміщаються на малюнку. Що ти думаєш?


4
Ось повні інструкції: Клацніть на рішенні правою кнопкою миші рішення -> "Додати" -> "Новий веб-сайт ..." -> (я вибрав "Пустий веб-сайт ASP.NET"). Змінивши місце розташування, не забудьте додати "\ MyName" до шляху, інакше натискання "OK" просто повторно відкриє діалогове вікно. Після цього клацніть правою кнопкою миші ваше рішення -> "Властивості" -> "Властивості конфігурації" -> зніміть прапорець "Створити" для веб-проекту.
user764754

Це все ще працює? за допомогою VS2015, але він не працює.
Ян Паоло Іди

У VS2017 ідеально створюється справжня папка, але піктограма WebSite (темне коло), що відображається в Провіднику рішень. Хтось знає, як це виправити?
Андрій Карчевський

Так, він працює у VS2019, але все ще не контролює зміни файлової системи. Ви повинні періодично "Оновити", щоб побачити поточні файли. Якби тільки проекти C # не були єдиним типом рішення для підтримки нового, більш чіткого та чіткого .*projформату файлової системи, що базується на глобальній основі .
Шеннон

32

У Visual Studio 2017 натисніть на значок "Рішення та папки" у вікні Провідника рішень. Ця кнопка переключається з віртуального виду "рішення" у "перегляд джерела", який відповідає компоновці папок і файлів у файловій системі. Коли ви додаєте нову папку, папка фізично створюється в очікуваному місці. рішення та папки.


Це корисно, але в "перегляді джерела" ви втратили всі ярлики правого клацання в рамках проекту, тобто "Управління пакетами NuGet".
Девід Лян

1
Чому тільки C ++ рішення чи проекти поводяться по-різному порівняно з іншими мовами?
Friendly Ghost

Це мені допомогло, тому я створив папку у вікні папки там, де я цього хотів, потім я додав папку з рішенням і додав проект як дочірню папку. Мені справді немає сенсу, але ця відповідь допомогла мені отримати
hanzolo

Це саме те, що я хочу. Дякую!
користувач1633272

10

Обрана відповідь передбачає, що можна використовувати фактичні проекти замість папок рішень, але насправді не пояснюється як. Я здогадуюсь, що я тут описую, можливо, найменш незручний спосіб досягти цього ... :-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папки в моєму рішенні.

Наскільки я міг бачити, це рішення працює дуже схоже на те, що вимагала ОП: воно буде працювати як некомпільована посилання на папку, і воно автоматично відображає будь-які зміни, внесені до нього.


На мій досвід, це накопичує суттєве значення, як тільки нічого підозрілий член команди торкається будь-яких властивостей файлу; після чого у вікні навігації з’являються дублікати файлів. За деяких умов кожен файл закінчується перерахуванням у файл .proj, і тоді виникає неподобство. Хоча я не люблю відмовлятися, я все ж віддаю перевагу підходу "Додати існуючий веб-сайт".
Шеннон

@shannon Я ніколи не відчував поведінки, яку ти згадуєш, але "відсутність доказів не є свідченням її відсутності", так це є. Але я використовую спільні проекти щодня, тому думаю, що це також має значення. Щодо проектів веб-сайтів (WSP), вони також можуть працювати, я думаю, вже давно я цим не користуюся.
rsenna

8

Сара Форд внесла макрос, щоб додати це. У Visual Studio 2010, якщо ви відкриєте Macro Explorer, ви побачите макрос під назвою "GenerateSlnFolderOnDirStructure". Це дозволить автоматизувати створення папок рішень і додати файли.


5

Папка для розчинення папки Сесілія Вірен - СесіліяSHARP

Видаліть клопоту щодо додавання декількох файлів до папки рішення. Просто використовуйте контекстне меню для рішення і трохи нижче опції створення нової папки рішення ви знайдете "Додати папку як папку рішення". Це створить папку рішення з тим самим іменем, що ви вибрали, і додасть елементи всередині цієї папки до папки рішення. Це не перемістить файли на диску.


3

Ні, це не підтримується. Як ви підозрювали, папки рішення - це просто віртуальні підпілки у файлі .sln, нічого спільного з файловою системою.


3

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


3

Примітка. Так, це можливо, ви можете створити папку на root, але її ліл трохи складний ....

Додавши додаткових зусиль, ви можете зробити це Як? Давайте дотримуйтесь кроку--

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

    ВАМ готовий ...

якщо ви все ще не можете бачити свою папку -----

  • 1.Додайте папку рішення xyz.
  • 2. Відкрийте sln-файл і змініть ім'я папки з назвою папки.

З повагою, ви зробили ..

Якщо у вас виникли проблеми, просто напишіть мені про допомогу.


3

Створіть "Папку рішення". Це створить логічну папку, але не фізичну. Клацніть правою кнопкою миші папку рішення та відкрийте нове діалогове вікно проекту. Але перш ніж натиснути кнопку ОК, ви повинні змінити місце розташування проекту на потрібну фізичну папку, і VS створить його та розмістить проект всередині.


1

Ви можете додати справжні папки, вибравши "Додати новий фільтр" для файлу проекту Visual Studio. Ви також можете зробити "Додати новий фільтр" у існуючій папці. Після створення папки перейменуйте її та додайте вихідний файл або файл заголовка чи залежно від вашого проекту. Це один із способів я знати, що дозволяє нам створювати реальні папки за допомогою ID ID Visual Studio.


Ця функція характерна для проектів C ++.
Тамір Даніелі

Це рішення стосується також проектів VS - питання про папки рівня рішення.
Тео

0

Папка, створена під рішенням, буде віртуальною, як було сказано. Можливо, це можна назвати способом вирішення, але ви можете фізично створити папку на диску до або коли ви додасте новий елемент / проект, і Роберт повинен бути рідним братом вашого батька.

ps- при ближчому розгляді, можливо, я повинен пояснити, "боб ваш дядько" означає ваш штраф / відсортований.


Чи має значення, чи Роберт - брат твоєї матері?
Даррел Лі

0

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

Але оскільки ви не хочете, щоб папки рішення поводилися як "фізичні" папки, це тому, що ваш макет рішення може не обов'язково використовувати ту саму умову, що і ваш макет управління джерелом. Папки рішення дозволяють налаштувати ієрархію ваших проектів, щоб ви могли групувати проекти та предмети разом будь-яким способом, а потім вирішити, що вам це не подобається, та змінити його знову, не переглядаючи кошмар рухомих елементів управління джерелами. навколо і дратує решту вашої команди.


1
Це правильна відповідь - створіть файл на диску в папці з тим самим іменем, що і віртуальна папка, а потім додайте файл у VS за допомогою "Додати існуючий".
Річард

4
Вони могли легко реалізувати як віртуальну, так і фізичну папки. Це явно не помічає. Дивіться посилання: будь-який інший IDE, ніколи.
Тамір Даніелі

6
Я зовсім не розумію, чому поняття (IIS) Virtual Directories має щось спільне з папками рішення. Щодо аргументу управління джерелом, я не бачу проблеми. Чому файлові рухи будуть дратувати решту вашої команди? Це звичайна операція. І чому ви хочете, щоб компонування файлів у керуванні джерелом відрізнялася від фізичного макета?
user247702

2
Фізичні папки рішення полегшать (хоча тільки трохи) , щоб створити сучасні структури папок , як NancyFx - х , де кілька проектів потрапляють в категорію , такі як src, test, toolsі т.д. Ви б безумовно хочете , щоб прийняти це рішення на самому початку проекту до точки про дратує команду, але це справедливо для більшості будь-якого архітектурного рішення.
Ерік Ескільдсен

3
-1 Моя корисна справа така: іноді ми просто хочемо додати до рішення певні документи. Вони не будуватимуться, але вони зберігаються у контролі джерел. Зазвичай у нас є спеціальна папка для них. Я хотів би мати цю папку у своєму рішенні - не файли, які вона містить, а саму папку. Так, є способи обійти це обмеження, але вони не є оптимальними. Дійсне посилання на папку в рішенні просто працювало б.
rsenna

0

У мене є трохи вирішення цього (це не чудово, але це працює).

  1. Створіть папку у своєму рішенні (тобто "Contoso")
  2. Клацніть правою кнопкою миші рішення та натисніть "Відкрити папку в Провіднику рішень"
  3. Створіть фізичну папку (тобто "Contoso") в каталозі рішення
  4. Копіювання / створення файлів у фізичну папку.
  5. Перетягніть файли у віртуальну папку в Explorer Explorer.

Це не чудово, тому що вам потрібно буде вручну підтримувати посилання на файли, але це працює для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.