Где находятся папки с решениями Visual Studio 2013?
Моя текущая ситуация:
У меня было решение, в котором я разделил большой проект MVC на два небольших проекта. Конечно, два небольших проекта ссылаются на тот же JavaScript и файлы содержимого, которые были в старом более крупном проекте.
Что я хочу сделать:
Вместо дублирования сценариев и содержимого в 2 проектах, я хочу создать общую папку, на которую ссылается проект 2, используя что-то вроде ссылки или ярлыка.
Как я пытаюсь подойти к проблеме:
Я думаю, что папки с решениями - это решение моей проблемы. Поэтому я хочу создать папку решения, в которую я буду перемещать все свои сценарии и файлы содержимого.
Однако моя проблема заключается в том, что мне нужно перемещать файл за файлом в эту папку, поскольку мы не можем просто добавить существующую папку (я переместил папки сценариев и содержимого в сам каталог решений, а не в конкретный проект). И это так утомительно.
Вот что я пытался сделать:
- Сначала я попытался определить, где создаются папки с решениями. Однако я обнаружил, что папки с решениями физически не существуют. Я думаю, что это просто какая-то логическая структура вашего решения. Каждый раз, когда вы добавляете файл в папку решения, он физически добавляется в каталог решения.
- Я подумал, что файл решения (.sln) может содержать конфигурацию папок решения и их содержимое в каком-то формате xml. Тем не менее, это не так.
- Я открыл файл SQL Server Compact Edition (.sdf) решения, думая, что, возможно, существует таблица БД, описывающая папки решения. Однако, это также не похоже на случай.
Итак, наконец, мой вопрос:
Есть ли простой способ добавить существующую папку в качестве папки решения, чтобы избежать добавления файлов один за другим (у меня слишком много файлов).
Обновить:
Спасибо за ответы и предложения. В итоге я выбрал несколько иной подход. Я использовал команду перед сборкой: XCOPY "$(SolutionDir)Files\*.*" "$(ProjectDir)" /E
, Я сделал это, потому что предложенные решения и моя предыдущая попытка заключались в добавлении ссылок / ярлыков к файлам внешних ресурсов. Хотя это было хорошо, и ярлыки были фактически добавлены в проект, когда я тестировал проект MVC, IIS не удалось загрузить файлы ресурсов, поскольку он ищет физические файлы (конечно).
Итак, мой вопрос сейчас таков : есть ли каким-то образом, будь то событие сборки или конфигурация в файле csproj, чтобы "включить в проект" недавно "физически" скопированные файлы?
5 ответов
Мое окончательное решение проблемы - это сочетание предложенных решений и подходов, которые я решил использовать, чтобы локальный IIS мог видеть файлы.
Я добавил следующий раздел в файл csproj:
<Content Include="..\Files\**">
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
</Content>
Я также добавил следующую команду в качестве события перед сборкой в моем проекте:XCOPY /y "$(SolutionDir)Files\*.*" "$(ProjectDir)" /E
Папки решения (в файловой системе) являются необязательными, и в Visual Studio они обычно используются только для организации файлов в Visual Studio.
Это ручной подход к созданию "физической" папки на том же уровне, что и решение, но это уменьшает сложность.
Ниже приведены шаги для перемещения одного файла скрипта:
В файловой системе
- Создайте папку решения (обычно в каталоге верхнего уровня)
- Скопировать файл сценария из (одного) проекта в папку решения
В Visual Studio
- Создать папку решения
- Щелкните правой кнопкой мыши папку решения, выберите Добавить> Существующий элемент...
- Выберите файл сценария из новой папки решения в файловой системе, затем нажмите кнопку "Добавить".
- Исключить / удалить файл скрипта из проекта1
- Щелкните правой кнопкой мыши проект1, выберите Добавить> Существующий элемент...
- Выберите файл сценария из папки решения в файловой системе, выберите "Добавить как ссылку" в раскрывающемся списке кнопки "Добавить"
- Повторите шаги 6-8 для всех других проектов
Используя "Добавить как ссылку", главное, что мы сделали, это добавили ссылку на скрипт в папку решения, а не на фактический файл, копируемый в папку проекта.
Обратите внимание, что вы не ограничены работой с одним файлом за раз, его проще отслеживать.
Самый быстрый из известных мне способов найти папку с вашим решением:
В Visual Studio откройте " Обозреватель решений", если он еще не открыт. " Вид" -> "Другие окна" -> "Обозреватель решений" (CTRL + ALT + L).
В обозревателе решений щелкните правой кнопкой мыши свой проект или решение.
Выберите Добавить -> Новый элемент.
Всплывающее окно позволит вам выбрать новый шаблон файла, но вам нужно поле " Расположение " внизу. Он должен иметь путь к папке с вашим решением. Можно с уверенностью сказать, что ваша папка с решениями находится в этом месте или выше пары уровней.
Получив путь к папке с решением, вы можете нажать Отмена, чтобы выйти из мастера.
Как и советовал Дрю: редактировать файл проекта можно одним способом. Другой способ - отредактировать файл Solution в механизме, аналогичном механизму файла csproj. В файле решения проект с определенным GUID содержит сведения о наборе папок.
Напишите небольшое приложение, которое будет читать вашу папку и выводить небольшой текст желаемого вывода. Создавайте новые направляющие, пока файл не будет создан. Просто вставьте это вверху файла.sln. 2150E333-8FDC-42A3-9474-1A3956D46DE8, кажется, GUID, используемый для элементов решения.
Этот образец имеет несколько подпапок с содержимым во вложенной структуре. т.е.
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NewFolder1", "NewFolder1", "{4CDFCC66-45BD-4B6D-8758-FEF7E9F61C1C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SubFolder1", "SubFolder1", "{771BDBFB-5C01-4C51-A170-D88ECA8DE896}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SubFolder2", "SubFolder2", "{5D23AB90-5EF6-4611-A575-34F7B50BB1B6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NewFolder2", "NewFolder2", "{135E9F67-2DF8-4458-AC6D-FF82FC1B3BC6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SubSubFolder1", "SubSubFolder1", "{B41C7BAA-7E3D-405B-96AB-005120D12D26}"
ProjectSection(SolutionItems) = preProject
NewFolder1\SubFolder1\SubSubFolder1\a.txt = NewFolder1\SubFolder1\SubSubFolder1\a.txt
EndProjectSection
EndProject
Насколько я могу судить, visual studio не предоставляет эту функцию через свой интерфейс. Вероятно, предполагается, что файлы проекта существуют в папке проекта, а не в отдельности. Обычно это облегчает работу с проектами (перемещение, совместное использование и т. Д.).
Тем не менее, вам не нужно, чтобы каждая реальная папка в местоположении проекта была фактически включена в этот проект. Таким образом, вы можете сделать что-то вроде следующей структуры папок:
+ /Projects (contains ProjectA.csproj and ProjectB.csproj)
|
+-- /ProjectA (folder with files that are just for "ProjectA"
|
+-- /ProjectB (folder with files just for "ProjectB")
|
+-- /Shared (Folder with your shared scripts/files)
С этой структурой вы сможете использовать кнопку "Показать все файлы" и включить общую папку в оба проекта. Возможно, вам придется вручную редактировать файлы csproj, чтобы отобразить эту новую структуру, но это не должно быть слишком сложным.
Единственный другой вариант, о котором я могу подумать, - это попытаться вручную отредактировать файлы csproj, как показано в этом вопросе.
Надеюсь, что все помогает. Удачи!