我试过用几种不同的方式来问这个,但是让我们再试一次(因为我还没有得到答案,这让我疯了!)
我有一个非常大的经典ASP 3.0应用程序(~350K行),我想开始迁移到ASP.NET MVC。我想将旧的ASP文件保存在与MVC不同的项目中。
关于如何调试这些的想法?我应该将文件转储到同一文件夹中并创建两个不同的项目(一个WAP和一个MVC应用程序),它们引用每个文件和文件夹所需的相关文件和文件夹?这应该有效,但有没有人有更好的主意?我需要能够单独迁移应用程序的一小部分,因为这可能需要一到两年才能完成。
答案 0 :(得分:4)
经过大量的研究,我发现保持这些项目从IIS的角度合并的好方法,但在Visual Studio的单独项目中,是在同一个文件夹中创建项目,但保留每个文件都有自己的.csproj文件。
通过这种方式,可以单独发布它们或作为解决方案发布,我可以通过查看解决方案资源管理器轻松判断哪些文件属于每个项目。当项目从经典ASP(再次,非.NET)移动到MVC时,我将ASP项目中的旧文件夹从name
重命名为delete-me-name
,并在MVC项目中创建相应的区域。
到目前为止,这种方法运作良好。唯一的另一个变化是在global.asx.cs文件中添加了一个路由忽略规则来忽略.asp文件:
routes.IgnoreRoute("{resource}.asp/{*pathInfo}");
到目前为止,一切似乎都运作良好。
答案 1 :(得分:3)
免责声明这是我的首要任务,我从来没有这样做过,可能不合时宜:
经过初步审核后,我认为您有以下讨论的3个替代方案:
1)合并到1个应用程序中可以获得以下好处,相对简单,您需要修改global.asax - 设置您的mvc路由,IOC等 - HttpApplication,Session和Security(假设表单)基础)将工作。
有一个有点“次要”的问题,那就是共享tempData,如果你可以在你的页面上实例化一个SessionStateTempDataProvider(init加载,卸载以保存类似于视图状态),你应该能够创建,我似乎无法看到找到博客,但几个月前认为它是Steve Sanderson。
您的单元测试/代码覆盖率很难跟踪,您可能需要考虑管理方法,这是一个完全不同的讨论。
2)使用此选项,您将完全分离应用程序与新的继承问题集。如果您的应用程序使用它,HttpApplication。*可能会导致问题,因为它们会引用不同的文件夹,上下文等,但忽略了它表示您对它们是不同的应用程序感到高兴
下一个重要问题是让Sessions工作,现在这可能会非常棘手,如果session是inproc,那么每个应用程序都不会看到其他应用程序会话,但是如果你使用SQL或自定义缓存服务器进行会话状态你应该能够“破解”程序或引用/配置并在应用程序之间共享会话状态 - 最坏的情况下你需要编写自己的会话提供程序,(我从来没有写过一个,所以不知道这会有多难是或如果它甚至实用)。
下一个问题是表单身份验证,您可以执行标准单点登录,并确保MachineKey验证和解密密钥在配置中相同。临时数据将与选项1相同。对我而言,这听起来好像要改变的东西太多,不可行......
3)假设您使用了asp.net站点并添加了对mvc的引用并添加了默认的全局asax路由等,应用程序仍然应该干净地构建,但在查找时会抛出路由错误/ controller / action / id类型路由,因此您可能需要检查此信息。
假设有效,您可以“潜在地”对两个应用程序进行xcopy合并(即将所有文件从mvc应用程序复制到预部署的asp.net应用程序中)。我知道你可以通过创建一个两个已经合并的应用程序的大项目来实现这一点,但这样代码在构建过程的后期阶段就会被合并。 (签名的集会,让人觉得很麻烦)。再次,您将需要处理临时数据问题......
我没有涉及网址重写以及您可能需要考虑的许多其他方面,请注意每种方法都有明显的缺点,您可能需要考虑这些方面。
总结一下,我认为你最大的问题是来自mvc方面的HttpApplication,Session和TempData,来自asp.net方面的查看状态。网址重写,身份验证应该更容易。
正如阿甘正传所说:“那是我对此的看法。”