如何将新的MVC C#项目与现有的Web窗体VB.NET Web应用程序项目集成?

时间:2014-06-12 21:10:50

标签: c# asp.net-mvc vb.net webforms web-application-project

我们有一个公司网站,其中包含大量动态业务应用程序页面(例如购物车,服务台,产品/服务管理,报告等)。该网站构建为ASP.Net Web Application Project(WAP)。多年来,我们的系统已经发展到使用.NET 4.5和各种自定义业务逻辑DLL(以C#和VB.NET混合编写)。但是,该站点本身仍在使用VB.NET Web窗体。我们现在使用Razor / C#在MVC 4中完成了一些辅助项目,我们希望将此框架用于主企业站点上的新页面。实现这一目标的最简单方法是什么?

  • 我找到了这个steps to integrate MVC 4 into an existing Web Forms app的好名单。问题是因为我们现有的应用程序是VB.NET WAP,它编译成一个DLL,而.NET只允许每个DLL使用一种语言。该网站太大了,我们无法考虑将其一次性转换为C#(是的,我看过转换工具,它们很好,但即使99%的准确性也会给我们留下大量的清理工作。 )
  • 我考虑过将现有WAP转换为网站项目(WSP)which does allow mixing languages,然后按照上述步骤进行操作,但经过几页Google结果后,我找不到任何转换WAP的步骤到WSP。 (很多站点都提供相反的步骤:将WSP转换为WAP。)
  • 我的另一个想法是创建一个完全独立的MVC项目,然后以某种方式将它们挤压到相同的文件夹结构中,在那里它们将共享bin文件夹但编译为单独的DLL。我不知道这是否可行,因为某些文件会发生冲突(例如Global.asax,web.config等)
  • 最后,我可以想象一个妥协的解决方案,我们将所有MVC内容保存在主解决方案的子文件夹下的独立应用程序中。我们已经使用了自己的自定义会话状态解决方案,因此将旧网站之间的数据传递到新网页并不困难。

您认为上述哪些想法对我们最有意义?还有另一种我缺少的解决方案吗?

3 个答案:

答案 0 :(得分:3)

经过一些更多的研究和实验(并且得益于T.S.的建议),我已经将其缩小到我最初问题的第二或第四选项:

  1. 将我们的WAP转换为WSP,然后按照步骤将MVC集成到网站。我没有看到从WAP转移到WSP作为向后退一步。正如MSDN链接所解释的那样,性能不会受到影响,而且主要是如何调整构建/部署过程的问题。这种技术的主要优点是它允许多种语言在同一个项目和根文件夹中共存。某些文件(如Global.aspx.vb)必须保留在VB.NET中。但是特定的文件夹和网页可以指定为C#。我们的缺点是我们的网站有很多遗留页面使用旧式服务器端包含ASPX页面碎片,这些导致WSP中的构建错误。这些必须更改为用户控件,或者可能重命名为无法识别的扩展名,例如.aspxinclude,以便它们不包含在构建中。
  2. 将MVC子应用程序创建为新的.NET项目(请参阅http://support.microsoft.com/kb/307467)。父web.config需要其<system.web>部分包含<location path="." inheritInChildApplications="false">,新应用程序的子文件夹需要通过IIS管理器转换为应用程序。子应用程序可以是使用不同默认语言的WAP(C#vs VB.NET)。这使得从现有项目中分离更容易。但这也是一个缺点,因为MVC路由仅适用于子应用程序子文件夹中的URL。因此,如果我们希望我们网站的多个部分使用MVC路由,则需要单独的子项目,例如(/ cart,/ myaccount等)
  3. 我们可能会沿着选项#1的路径前进,转换为WSP,如果遇到重大障碍,我们只会求助于#2。


    更新:我能够使用技术#1进行转换。它现在已经工作了几个月了,所以我按照我遵循的程序发布了blog post

答案 1 :(得分:0)

想出了一个非常简单的解决方案。

  1. 创建新的MVC C#项目
  2. 将旧的vb项目添加到解决方案中。
  3. 将VB aspx页面移动到新的C#项目
  4. 删除VB页面第一行的属性背后的代码,例如...... Codebehind =&#34; ProductDetails.aspx.vb&#34; (这是神奇的)
  5. 在C#项目中添加对VB项目的引用
  6. 这也适用于母版页
  7. 奇怪的是,VB aspx页面只是找到了&#39;引用和C#项目的代码隐藏似乎并不关心aspx页面是VB。

    去图!

    希望我能节省一些时间。我花了很多时间在这上面。

答案 2 :(得分:-2)

这里有3个选项:

  1. 将ASP.NET Web表单从VB转换为C#
  2. 将用C#编写的MVC 4转换为VB。
  3. 再次将ASP.NET Web表单中的所有旧应用程序开发到MVC 4(丑陋但未来更改更好)
  4. 我的建议是让他们保持不同的项目只分享您的业务逻辑。并在同一个解决方案文件中。