我可以在asp.net 4.0站点中托管.net 2.0虚拟目录吗?

时间:2010-08-12 16:14:49

标签: asp.net .net-4.0

我们在2.0网站上运行.NET 4.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"/>

3 个答案:

答案 0 :(得分:10)

将以下内容添加到根web.config

<location path="." inheritInChildApplications="false"> 

答案 1 :(得分:5)

Is it possible to completely negate a "higher" web.config in a subfolder?

在你的root web.config中:

  <location path="." inheritInChildApplications="false">
    <system.web>      
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
  </location>

(Ben首先得到了这个,但我会留下这个答案,因为它指出了一些替代方案)

答案 2 :(得分:1)

这是一个web.config继承问题,您无法克服<location>指令的所有问题。

我们在其中一个应用上遇到类似错误的重复配置指令。 经过调查后,它看起来像是this issue

简而言之,我们的根网站是ASP.NET 3.5(添加了特定库的2.0),我们有一个ASP.NET 4.0的子应用程序。

web.config继承导致ASP.NET 4.0子应用程序继承父ASP.NET 3.5应用程序的web.config文件。

但是,ASP.NET 4.0应用程序的全局(或“根”)web.config,它位于C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ web.config和C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config(取决于你的位数),已经包含了.NET 3.5应用程序的特定于应用程序的web.config中的配置部分。

ASP.NET 4.0应用程序然后尝试将根ASP.NET 4.0 web.config和父web.config(用于ASP.NET 3.5应用程序的那个)合并在一起,并在{{中运行重复项1}} node。

<configSections>指令不能用于阻止<location>条目的继承。我能找到的唯一解决方案是从父web.config中删除configSections,然后

  1. 确定您的根应用程序中不需要它们,或
  2. 将父应用程序升级到ASP.NET 4.0(以便它可以访问根web.config的configSections)