如何在.NET 3.5 Web应用程序中使用.NET 4.0 Web应用程序?

10
我的公司有一个建立在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 3.5应用程序中嵌套.NET 4.0应用程序吗?

编辑

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

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


那看起来应该可以。你能在IIS中为网站发布文件夹浏览列表的截图吗? - mellamokb
你确定已经回收了应用程序池等吗? - Jimmy
@Chevex:为什么要“转换”呢?它应该是兼容的。你可以拿出你的QA系统,“转换”到4.0版本,运行自动化测试,看看会发生什么。 - John Saunders
@Chevex,尝试下面的建议,它几乎总是可以解决这种问题。 - Hawxby
@Chevex:这就是为什么我不建议重新编译。我建议将整个应用程序的AppPools更改为.NET 4.0,这不应该留下更多问题,只需要清理web.config文件即可。这些错误应该会在由该web.config控制的页面回答时出现。很容易找到它们,并且修复它们也不太困难。应用程序本身没有任何更改。 - John Saunders
显示剩余21条评论
6个回答

12

遗憾的是,Web.config继承是无法完全关闭的;具体而言,在web.config中定义哪些配置部分存在于web.config中的顶部部分不能在子应用程序中被忽略/覆盖。

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


2
链接的页面非常有帮助。谢谢。今晚稍后我会告诉大家进展如何。 - Chev
1
这就做到了。谢谢你实际回答我提出的问题。 - Chev
1
好问题,好答案。我从来不喜欢.NET配置文件的设计,但这个解决方案彻底证明了从根本上设计是有问题的。修改机器范围内的配置文件,以便让一个父子Web应用程序对工作是可怕的! - Greg Woods

1
在我的应用程序中,我通过使用 <location> 元素和 <clear /> 和类似的元素,在 web.config 中成功地实现了嵌套应用程序。
以下是我一个 web.config 文件的摘录:
...
<!-- Do not inherit. -->
<location path="." inheritInChildApplications="false">
    <system.web>
        ...

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


1

你尝试过在父文件夹的web.config文件中将"inheritInChildApplications"属性设置为"false"吗?

参考Saul Dolgin's answer中类似问题的解答,了解如何进行操作。


0

编辑: 如首先提到的,首要任务是确保每个应用程序都有自己的应用程序池。请仔细检查,因为在同一应用程序池中运行 .net 3.5 站点和 .net 4 站点将导致整个应用程序池崩溃。

接下来,尝试删除整个脚本部分组,根据我的经验,这可以解决问题,我没有注意到任何问题。


听起来他的问题是引用了错误的web.config文件。做出这样的更改会破坏他的父应用程序。 - mellamokb
这通常会生成一个“在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误”的错误。 - Hawxby

0
假设您当前的网站使用针对.NET 2.0的AppPool1。
创建AppPool2,将其定位到.NET 4.0,并通过应用程序的虚拟目录使用它。

0

确保应用程序池的机器配置中没有这些内容。如果有的话,只需从您的 Web 配置文件中删除它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接