Не удается запустить проект MVC4, если не использовать стандартный выходной каталог

Моя структура проекта выглядит следующим образом:

  • ЦСИ
    - библиотека классов 1
    - библиотека классов 2
    - веб-проект
  • бен
    - отладка
    - релиз

Выходной каталог по умолчанию для веб-проекта MVC4 составляет .\Bin\ (т.е. в каталоге веб-проекта), но я меняю его на нечто вроде ..\bin\debug\ или ..\bin\release\, чтобы соответствовать моей вышерасположенной структуре проекта. Он компилируется отлично, и двоичные файлы идут в правильные места.

Но когда я запускаю проект, он жалуется, что Could not load type Myproject.MvcApplication, тогда как если я не сделаю вышеуказанные изменения, он будет работать.

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

Ответы

Ответ 1

Короткий ответ, вы не можете. Это не имеет ничего общего с Visual Studio или даже .NET, это ограничение IIS.

Причина в том, что IIS ожидает, что каталог bin будет находиться непосредственно под папкой папки веб-сайта. Это механизм безопасности, который нельзя обойти. Цель состоит в том, чтобы предотвратить скомпрометированный веб-сайт от "экранирования" от границ корневого узла непосредственно на сайте.

Почему вы даже ХОТИТЕ это сделать?

Ответ 2

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

Кажется, что существует конфликт между соблюдением ожиданий IIS и необходимостью отлаживать и выпускать отдельные и четко обозначенные. Я думаю, что существует потребность в том, что текущее решение не очень хорошо удовлетворяет. Отладка и выпуск - это соображения времени сборки, при соблюдении IIS - время пакета/развертывания, и два из них запутались.