【问题标题】:How to use a .NET 4.0 web application within a .NET 3.5 web application?如何在 .NET 3.5 Web 应用程序中使用 .NET 4.0 Web 应用程序?
【发布时间】:2011-02-18 20:46:27
【问题描述】:

我的公司有一个使用 ASP.NET 构建的网站,并以 .NET 3.5 为目标。它过于混乱和庞大,无法及时转换为 .NET 4。我的任务是建立一个票务系统。我希望这个票务系统是一个完全独立于主应用程序的应用程序。

我在网站上添加了一个名为“TicketingSystem”的目录,然后在 IIS 中,我使用面向 .net 4.0 的应用程序池将此文件夹设置为应用程序。我假设这个应用程序不会受到它上面的应用程序的影响,特别是因为它使用自己的应用程序池,但它似乎受到了某种影响。使用我的 .net 4 Web 应用程序导航到此目录会生成此错误:

http://www.chevtek.com/content/error.jpg

我介绍了文件路径等敏感信息,但是说配置文件的行有一个到父应用程序配置文件的路径,而不是 .net 4 应用程序的配置文件。 .net 4.0 应用不能嵌套在 .net 3.5 应用中吗?

编辑

根据要求,这里是 IIS 目录结构的屏幕截图。

http://www.chevtek.com/content/IISDirectoryStructure.jpg

【问题讨论】:

  • 看来应该可以了。可以发一张网站的IIS中文件夹浏览列表的截图吗?
  • 您确定回收您的应用程序池等吗?
  • @Chevex:为什么会是“转换”?它应该是兼容的。让您的 QA 系统“转换”到 4.0,运行自动化测试,看看会发生什么?
  • 这个问题之前已经出现过;请参阅我对这个问题的回答:stackoverflow.com/questions/4315999/…
  • 我认为你误解了约翰,他们的应用程序一团糟。它无法转换,他们没有自动化测试。这是一个巨大的程序集和必须留在 3.5 中的东西。说真的,我们不能去那里。他们把这件事搞砸了。 (在我来之前)

标签: asp.net .net iis iis-7 .net-framework-version


【解决方案1】:

不幸的是,Web.config 继承不是您可以完全关闭的;具体来说,定义 web.config 中存在哪些配置部分的 web.config 顶部部分不能在子应用程序中被忽略/覆盖。

解决方案记录在here(asp.net 4 breaking changes documentation);本质上,您必须将当前位于顶级应用程序中的值向上移动到特定于机器/FrameworkVersion 的配置文件中,然后将所有(或至少大部分)根 web.config 包装在禁用继承的位置标记中。

【讨论】:

  • 链接的页面帮助很大。谢谢你。今晚晚些时候我会告诉大家进展如何。
  • 做到了。感谢您实际回答我提出的问题。
  • 好问题,好答案。我从来都不喜欢 .NET 配置文件的设计,但这个解决方案一劳永逸地证明了这种设计从一开始就很糟糕。修改机器范围的配置文件,这样我就可以让一对父子 Web 应用程序正常工作,这太糟糕了!
【解决方案2】:

您是否尝试在父文件夹的 web.config 文件中将“inheritInChildApplications”属性设置为“false”?

请参阅Saul Dolgin's answer 以了解如何执行此操作的类似问题。

【讨论】:

    【解决方案3】:

    在我的应用程序中,通过在 web.config 中使用 <location> 元素以及 <clear /> 和类似元素,我或多或少地成功使用了嵌套应用程序。

    这是我的 web.config 文件的摘录:

    ...
    <!-- Do not inherit. -->
    <location path="." inheritInChildApplications="false">
        <system.web>
            ...
    

    我们的想法是把你不想想要继承到子应用程序的所有部分放在那些location元素中,就像我上面的例子一样。

    【讨论】:

      【解决方案4】:

      假设您当前的站点使用面向 .NET 2.0 的 AppPool1

      创建 AppPool2,将其定位到 .NET 4.0 并通过应用程序的虚拟目录使用它。

      【讨论】:

        【解决方案5】:

        确保这些东西不在应用程序池的机器配置中。如果是这样,只需将其从您的网络配置中删除即可。

        【讨论】:

          【解决方案6】:

          编辑: 如前所述,第一个调用端口是确保每个应用程序都有自己的应用程序池。双重和三重检查,因为同一应用程序池中的 .net 3.5 站点和 .net 4 站点将导致整个应用程序池中断。

          接下来,尝试删除整个脚本部分组,根据我的经验,它解决了它,我没有发现任何问题

          【讨论】:

          • 听起来他的问题是它引用了不正确的 web.config。进行这样的更改会破坏他的父应用程序。
          • 这通常会产生“使用注册为 allowDefinition='MachineToApplication' 超出应用程序级别的部分是错误的”错误。
          猜你喜欢
          • 2011-08-10
          • 2011-02-22
          • 1970-01-01
          • 2011-04-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多