У нас не было проблем с запуском виртуальных каталогов .NET 4.0 на веб-сайтах 2.0, но обратный способ дает нам некоторые проблемы. Это понятно, но есть ли способ обойти эту проблему? Они работают с разными пулами приложений ... можем ли мы сделать так, чтобы виртуальный каталог пропустил web.config веб-сайта и сразу перешел к machine.config?
Получаем следующую ошибку:
Parser Error Message: Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.
Source Error:
Line 22: </appSettings>
Line 23: <system.web>
Line 24: <compilation debug="true" targetFramework="4.0" />
Line 25: <customErrors defaultRedirect="url" mode="RemoteOnly">
Line 26: <error statusCode="404" redirect="~/404.aspx"/>
Ответ 1 · рейтинг 10 · Ben Robinson
Добавьте следующее в свой корневой файл web.config
<location path="." inheritInChildApplications="false">
Ответ 2 · рейтинг 5 · ScottE
Можно ли полностью отрицать более высокий web.config в подпапке?
В корневом файле web.config:
<location path="." inheritInChildApplications="false">
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
</location>
(Бен дошел до этого первым, но я оставлю этот ответ, поскольку он указывает на несколько альтернатив)
Ответ 3 · рейтинг 1 · Josh
Это проблема наследования web.config, и вы не можете решить все проблемы с помощью директивы <location>.
Мы получали похожие ошибки из-за дублирования директив конфигурации в одном из наших приложений. После расследования выяснилось, что это связано с этой проблемой.
Короче говоря, наш корневой веб-сайт - это ASP.NET 3.5 (это версия 2.0 с добавленными конкретными библиотеками), и у нас есть вспомогательное приложение, которое является ASP.NET 4.0.
Наследование web.config заставляет суб-приложение ASP.NET 4.0 наследовать файл web.config родительского приложения ASP.NET 3.5.
Однако глобальный (или "корневой") файл web.config приложения ASP.NET 4.0, который находится в C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ web.config и C: \ Windows \ Microsoft. NET \ Framework64 \ v4.0.30319 \ Config \ web.config (в зависимости от вашей разрядности) уже содержит разделы конфигурации, которые присутствуют в специфичном для приложения web.config приложения .NET 3.5.
Затем приложение ASP.NET 4.0 пытается объединить вместе корневой ASP.NET 4.0 web.config и родительский web.config (тот, который для приложения ASP.NET 3.5) и запускает дубликаты в узле <configSections>.
Директиву <location> нельзя использовать для предотвращения наследования записей <configSections>. Единственное решение, которое мне удалось найти, - это удалить configSections из родительского файла web.config, а затем либо
- Определите, что они вам не нужны в корневом приложении, или
- Обновите родительское приложение до ASP.NET 4.0 (чтобы оно получило доступ к корневым разделам конфигурации web.config)