Почему я случайно получаю "ошибку, чтобы использовать раздел, зарегистрированный как allowDefinition =" MachineToApplication ", при создании проекта MVC?

Я видел несколько вопросов о SO о подобной ошибке при развертывании веб-сайта, но я, похоже, случайно получил эту ошибку, когда building веб-сайт ASP.NET MVC в Visual Studio. Выполнение чистой обычно исправляет ее, но есть ли способ избежать этого полностью?

Ошибка использования раздела, зарегистрированного как allowDefinition = 'MachineToApplication', превышающего уровень приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS. d:...\OBJ\Debug\пакет\packagetmp\web.config

Обратите внимание, что он жалуется на root web.config, а не на подкаталог Views.

Ответы

Ответ 1

Я предполагаю, что вы используете функцию публикации. Я получаю эту ошибку при использовании публикации в каталоге файлов.

Публикация вашего приложения создает временную копию вашего приложения в каталоге \obj\debug\package\packagetmp\web.config.

Этот web.config путает среду IDE, которая думает, что это приложение, но не в виртуальном каталоге, поэтому вы получаете ошибку.

Обход проблемы:

Это простой способ обхода этой команды:

 del "$(ProjectDir)\obj\Debug\Package\PackageTmp\web.config"

Ошибочные обходные пути:

  • Изменение каталога для "Местоположение, где будет создано пакет" в настройках "Пакет/Публикация в Интернете", похоже, не имеет эффекта - даже если вы умнее и попытаетесь выставить его вне корня проекта с помощью......

  • Создание фактического виртуального каталога в IIS для 'PackageTmp' также не исправило его!

СОЕДИНЯЙТЕ ВОПРОС:

http://connect.microsoft.com/VisualStudio/feedback/details/503254/web-config-in-package-folder-makes-it-impossible-to-compile-debug

Я надеюсь, что они исправят это в RC!

Ответ 2

Мне не удалось заставить другое обходное решение работать, но для меня было создано следующее предзаготовительное событие:

rmdir /s /q "$(ProjectDir)obj\Debug\Package"
rmdir /s /q "$(ProjectDir)obj\Debug\TransformWebConfig"
rmdir /s /q "$(ProjectDir)obj\Release\Package"
rmdir /s /q "$(ProjectDir)obj\Release\TransformWebConfig"

Ответ 3

I ответил на подобный вопрос в последнее время, и похоже, что это может быть связано.

Подводя итог, я столкнулся с этим в одном из наших проектов MVC, и это связано с тем, что свойство MvcBuildViews в файле проекта установлено на true. Установка свойства в false устраняет проблему.

<MvcBuildViews>false</MvcBuildViews>

Я также нашел этот ответ, в котором описывается альтернатива, которая не требует отключения структуры просмотра.

Ответ 4

Вы можете безопасно поместить эту целевую сборку в конец вашего .csproj файла и оставить MvcBuildViews до true.

Удаляет папку obj перед запуском сборки...

  <Target Name="BeforeBuild">
    <!-- Remove obj folder -->
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
  </Target>