Asp.net mvc 经典的ASP和MVC并排,不同的项目?

Asp.net mvc 经典的ASP和MVC并排,不同的项目?,asp.net-mvc,asp-classic,projects-and-solutions,migrate,Asp.net Mvc,Asp Classic,Projects And Solutions,Migrate,我试着用几种不同的方式问这个问题,但让我们再试试(因为我还没有得到答案,这让我发疯!) 我有一个非常大的经典ASP 3.0应用程序(~350K行),我想开始迁移到ASP.NET MVC。我想将旧的ASP文件与MVC文件分开保存在一个单独的项目中 关于如何调试这些的想法?我是否应该将文件转储到同一个文件夹中,然后创建两个不同的项目(WAP和MVC应用程序),以引用每个项目所需的相关文件和文件夹?这应该行得通,但有人有更好的主意吗?我需要能够单独迁移应用程序的一小部分,因为这可能需要一到两年的时间才

我试着用几种不同的方式问这个问题,但让我们再试试(因为我还没有得到答案,这让我发疯!)

我有一个非常大的经典ASP 3.0应用程序(~350K行),我想开始迁移到ASP.NET MVC。我想将旧的ASP文件与MVC文件分开保存在一个单独的项目中


关于如何调试这些的想法?我是否应该将文件转储到同一个文件夹中,然后创建两个不同的项目(WAP和MVC应用程序),以引用每个项目所需的相关文件和文件夹?这应该行得通,但有人有更好的主意吗?我需要能够单独迁移应用程序的一小部分,因为这可能需要一到两年的时间才能完成。

免责声明这是我的想法,我从来没有这样做过,可能会偏离目标:

在初步审查后,我认为您有以下三种备选方案:

  • 合并到一个应用程序中
  • 将一个应用程序作为根应用程序,另一个作为“子”应用程序
  • 生成后将合并复制到一个应用程序中(这可能不可能)
  • 1)合并到1应用程序为您提供了以下好处,您只需修改global.asax-设置您的mvc路由、IOC等–HTT应用程序、会话和安全(假定基于表单)即可

    有一个稍微“小”的问题,那就是共享tempData,如果你能在你的页面上实例化一个SessionStateTempDataProvider(初始化加载,卸载保存类似于视图状态),你应该能够创建这个,我似乎找不到这个博客,但我想这是几个月前的事了

    您的单元测试/代码覆盖率将很难跟踪,您可能需要考虑如何管理它,这是一个完全不同的讨论

    2)使用此选项,您可以将应用程序与一组新的继承问题完全分离。HttpApplication.*如果您的应用程序使用它,可能会导致问题,因为它们会引用不同的文件夹、上下文等,但忽略声明您很高兴它们是不同的应用程序

    下一个大问题是让会话正常工作,现在这可能非常棘手,如果会话在进程中,那么每个应用程序将看不到其他应用程序会话,但是如果您使用SQL或自定义缓存服务器作为会话状态,您应该能够“破解”过程或引用/配置,并在应用程序之间共享会话状态-最坏的情况下,您需要编写自己的会话提供程序(我从未编写过一个,因此不知道这有多困难,或者它是否实用)

    下一个问题是表单身份验证,您可以执行标准的单点登录,并确保MachineKey验证和解密密钥在配置中相同。临时数据将与选项1相同。对我来说,这听起来像是太多的事情要改变,要可行

    3)假设您使用asp.net站点并添加对mvc的引用,并添加默认的全局asax路由等,应用程序仍应干净地构建,但在查找/controller/action/id类型路由时会抛出路由错误,因此您可能需要检查此项

    假设这是可行的,您可以“潜在地”对两个应用程序进行xcopy合并(即,将所有文件从mvc应用程序复制到asp.net应用程序预部署中)。我知道您可以通过创建一个大型项目来实现这一点,其中两个应用程序已经合并,但这样代码就可以在构建过程的后期阶段进行组合。(签名的程序集,让人觉得很麻烦)。再一次,您需要处理临时数据问题

    我没有涉及过URL重写和许多其他需要考虑的方面,请注意,每种方法都有明显的缺点,您可能需要考虑。p> 总而言之,我认为您最大的问题将是来自mvc端的HttpApplication、Session和TempData,以及来自asp.net端的view state。Url重写,身份验证应该更容易


    正如阿甘所说,“这是我的想法”。

    经过大量研究,我发现从IIS的角度来看,保持这些项目合并的一个好方法,但在Visual Studio中的不同项目中,就是在同一文件夹中创建项目,但将每个项目的文件保留在各自的.csproj文件中

    通过这种方式,可以将它们单独发布或作为解决方案发布,通过查看解决方案资源管理器,我可以很容易地判断哪些文件属于每个项目。当项目从经典ASP(同样,不是.NET)移动到MVC时,我将ASP项目中的旧文件夹从
    name
    重命名为
    delete me name
    ,并在MVC项目中创建相应的区域

    到目前为止,这一切都很顺利。唯一的其他更改是在global.asx.cs文件中添加了路由忽略规则以忽略.asp文件:

                 routes.IgnoreRoute("{resource}.asp/{*pathInfo}");
    

    到目前为止,一切似乎都运行得很好。

    您是想将应用程序整体转换为ASP.NET MVC,还是只是通过将一个应用程序转换为MVC来“拥抱并扩展”旧应用程序?“拥抱并扩展”可能最能描述我所追求的。例如,我们在/forum文件夹中有一个ASP讨论论坛。我想在MVC项目中创建一个名为“论坛”的区域,并从ASP站点中删除相同的文件夹,然后让MVC论坛接管。对于这样一个规模的网站,唯一的方法就是一件一件地完成。感谢您的详细回复。实际上,我正在将一个经典的ASP应用程序(不是.net)与MVC相结合,但我认为您在这里提到的几乎所有内容仍然适用。我们正在尝试做同样的事情,经典ASP与ASP.net MVC4,但到目前为止运气不佳,这些想法对我们来说都不起作用。我们需要将它们放在同一个应用程序域中,以便