Соединения или виртуальные каталоги для веб-приложений?

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

Наша команда изучает возможность отказаться от виртуальных каталогов в пользу переходов, чтобы упростить процесс сборки. Моя цель - составить список плюсов и минусов, чтобы принять обоснованное решение относительно этого изменения.

Уместнее ли использовать в проектах веб-приложений соединения или виртуальные каталоги?

Среда - ASP.NET, IIS6/IIS7, VS.NET.

2 ответа

Решение

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

Прежде всего, начиная с Windows Vista, новшеством являются символические ссылки (которые, по сути, такие же, как соединения, но могут также указывать на путь к файлу или удаленному SMB).

Символьные ссылки позволяют, например, совместно использовать каждую часть веб-приложения, кроме его Web.config и таблицы стилей. Это то, что виртуальные каталоги никогда не смогут сделать.

Кроме того, виртуальные каталоги участвуют в мониторинге изменений ASP.NET. Если вы попытаетесь удалить (файл или) каталог из вашего приложения, например, ASP.NET убьет ваше приложение после завершения запроса, что приведет к потере сеанса и т. Д. Если вместо использования виртуального каталога вы используете символический ссылка, изменение не будет замечено, и ваше приложение будет продолжать работать.

Важно помнить, что символические ссылки не являются повседневной функцией в Windows. Да, вы можете видеть, что файл или каталог связан в Проводнике, но не сразу видно, с чем он связан. Кроме того, из кода гораздо сложнее увидеть, связан ли файл, поэтому, если вы случайно удалите файл, на который ссылается, из миллиона символических ссылок, все эти символические ссылки внезапно "прекратят существовать".

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

В случае с виртуальными папками IIS должен быть установлен в каждой среде. Однако для обоих подходов необходимо вручную поддерживать все ссылки после каждого изменения (например, ситуация, когда кто-то добавил еще одну ссылку), что не очень удобно.

Рассмотрите возможность использования VCS с системой ссылок. Например СВН с внешними. В этом случае у вас будет:

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