Как вы разделяете скрипты между несколькими проектами в одном решении?


в случае, если вопрос не ясен. У меня есть 3 проекта MVC в одном решении. Каждый раз, когда я создаю новый проект, он добавляет папку "Скрипты" со всеми .js файлы, которые мне когда-нибудь понадобятся. Я не хочу, чтобы это создается каждый раз для каждого приложения. Есть ли способ ссылаться на Скрипты из Центральной папки в решении, чтобы все приложения / проекты могли совместно использовать одну общую папку скриптов со всеми распространенными среди них скриптами?

Edit: Пожалуйста, объясните плюсы и минусы этого делать, если таковые имеются...теперь мне любопытно.

7 64

7 ответов:

вот что я бы порекомендовал:

щелкните правой кнопкой мыши решение и создать Новая Папка Решения под названием Common Javascript Files (или как вам угодно это называть.

New Solution Folder

Common Javascript Files Solution Folder

щелкните правой кнопкой мыши на решении, нажмите открыть папку в Проводнике Windows, или перейдите туда вручную для других версий Visual Studio : (

Open Folder In Windows Explorer

в каталоге решений создайте каталог с тем же именем, что и папка решения (папки решения обычно не совпадают с каталогами на уровне исходного кода, но это будет для здравомыслия).

Common Javascript Files Directory

в этом новом каталоге, добавьте файлы, которые должны быть разделены между ними.

Add Javascript Files To Directory

в Visual Studio щелкните папку решение и выберите добавить -Существующий Элемент.

Visual Studio Add - Existing Itme

в файле диалог выбора, перейдите в каталог, созданный ранее, выберите файл(ы), добавленные в каталог и нажмите добавить.

Select Files To Add

Solution Folder Files

в каждом проекте, который нуждается в общем файле, щелкните правой кнопкой мыши по проекту (или каталогу в проекте) и нажмите добавить -Существующий Элемент.

Project Add Existing Item

перейдите в общий каталог, выберите файлы и в раскрывающемся стрелка вниз нажмите кнопку Добавить Как Ссылку.

Add As Link

теперь файлы в проектах по существу являются короткими отрезками к файлам в папке решения. Но они рассматриваются как фактические файлы в проекте (это включает .CS или Visual Basic файлы, они будут скомпилированы как файлы, которые фактически существуют в проекте).

Linked Files

плюсы

  • файлы действительно разделяются между проектами по адресу разработки
  • только файлы, необходимые для каждого проекта могут быть добавлены, это не все или ничего
  • не требует настройки в IIS (виртуальный каталог и т. д.)
  • если решение находится в системе управления версиями TFS, вы можете добавить каталог в источник TFS, и общие файлы будут контролироваться исходным кодом.
  • Редактирование файла, выбрав его в проект, будет редактировать сам файл.
  • удалить связанный файл не удаляйте файл.
  • это не ограничивается JS файлов, связанные файлы могут быть любой файл, который вам может понадобиться (изображения, Css, Xml, CS, CSHTML и т. д.)

минусы

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

лучшее, что можно сделать, ИМО, это свернуть свой собственный CDN... В основном просто создайте другой сайт в IIS и дайте ему собственную привязку, например"http://cdn.somedomain.com"

затем сохраните все ваши css/js/шрифты / общие изображения и т. д. На сайте CDN и свяжите их с другими сайтами.

Это решает 2 проблемы,

  1. все ваши вещи делятся, когда это необходимо, и вам нужно только управлять 1 ревизией за файл.
  2. ваши пользователи браузеры могут кэшировать их в одном месте вместо загрузки копий Ваших материалов для каждого сайта, который их использует..

Я добавил этот ответ, потому что я вижу много людей, ссылающихся на создание виртуальных каталогов. Хотя это действительно разделяет файлы, он создает несколько путей загрузки для них, что является крайней тратой пропускной способности. Почему ваши пользователи загружают jquery.js (1 * Количество сайтов), когда вы можете разрешить их загрузку это когда-то (cdn.somedomain.com).

кроме того, когда я говорю о трате пропускной способности, я говорю не только о пропускной способности сервера, я говорю о мобильных пользователях в планах данных... Например, на днях я попал на сайт HR наших компаний (insuance и т. д.) На своем телефоне, и он потреблял 250 МБ прямо из ворот, загружал jquery и кучу вещей по 5 раз каждый... На плане данных 2GB в месяц веб-сайты, которые делают это, действительно раздражают меня.

вот оно, ИМО лучшее и самое простое решение, я провел неделю, пытаясь найти лучший и самый простой способ, который всегда имел больше минусов, чем плюсов:

Resources(DLL)
  Shared
    images
      image.png
    css
      shared.css
    scripts
      jquery.js


MvcApp1
  Images
  Content
  Shared <- We want to get files from above dll here
  ...

MvcApp2
  Images
  Content
  Shared <- We want to get files from above dll here
  ...

добавьте следующую строку в MvcApp1 -> проект -> MvcApp1 свойства -> события -> создать после события построения:

start xcopy "$(SolutionDir)Resources\Shared\*" "$(SolutionDir)MvcApp1\Shared" /r /s /i /y

вот объяснение того, что он делает:включая каталог файлов содержимого действия сборки из указанной сборки на том же уровне, что и каталог bin

сделайте то же самое для MvcApp2. Сейчас после каждой сборки новые статические файлы будут скопированы в ваше приложение, и вы можете получить доступ к файлам, таким как "~/Shared/css/site.css"

Если вы хотите, вы можете настроить команды для копирования скриптов .dll в папку скриптов каждого приложения, таким образом, вы можете переместить некоторые скрипты .dll без необходимости изменять какие-либо пути,вот пример:

Если вы хотите копировать только скрипты из Resources / Shared / scripts в MvcApp1 / scripts после каждой сборки:

start xcopy "$(SolutionDir)Resources\Shared\Scripts\*" "$(SolutionDir)MvcApp1\Scripts" /r /s /i /y

это поздний ответ, но Microsoft добавила тип проекта под названием Shared Project начиная с Visual Studio 2013 Update 2 это может сделать именно то, что вы не хотите без необходимости link файлы.

ссылка на общий проект появится под узлом ссылки в Обозревателе решений, но код и ресурсы в общем проекте рассматриваются как файлы, связанные с основным проектом.

"в предыдущих версиях Visual Studio, вы могли бы поделиться исходный код между проектами, добавив - > существующий элемент, а затем выбрав ссылку. Но это было довольно неуклюже, и каждый отдельный исходный файл должен был быть выбран индивидуально. С переходом на поддержку нескольких разрозненных платформ (iOS, Android и т. д.) Они решили упростить совместное использование источника между проектами, добавив концепцию Shared Проекты."

https://blogs.msdn.microsoft.com/somasegar/2014/04/02/visual-studio-2013-update-2-rc-windows-phone-8-1-tools-shared-projects-and-universal-windows-apps/

информация из этой темы:

в чем разница между общим проектом и библиотекой классов в Visual Studio 2015?

https://stackoverflow.com/a/30638495/3850405

в IIS создайте виртуальную папку, указывающую на одну и ту же папку сценариев для каждого из 3 приложений. Тогда вам нужно будет только сохранить их в одном приложении. Есть и другие альтернативы, но это действительно зависит от того, как ваши приложения структурированы.

Edit

более страшная идея заключается в использовании областей. В общей области есть каталог скриптов с набором скриптов для компиляции. Затем обслуживать их самостоятельно, получая их из dll. Этот может быть хорошей идеей, если вы предвидите, что общая зона будет иметь больше функциональности позже.

предложение, которое позволит вам отлаживать скрипты без повторной компиляции проекта:

  • выбрать один "мастер проект" (который вы будете использовать для отладки) и добавить физическая файлы
  • используйте функцию "Добавить как ссылку", как описано в ответе Эрика, чтобы добавить файлы сценариев в другие проекты в решении
  • используйте задачу CopyLinkedContentFiles при сборке, как предложено в комментарии Mac, чтобы скопировать файлы второй переход к вашим дополнительным проектам

таким образом, вы можете изменить скрипты в "мастер" проект без перезапуска отладчика, который для меня делает мир разницы.

большинство файлов, которые включены по умолчанию, также доступны через различные CDN.

Если вы не добавляете свои собственные скрипты, вам может даже не понадобиться каталог скриптов.

CDN Microsoft для скриптов:http://www.asp.net/ajaxlibrary/cdn.ashx