2014-06-12 48 views
2

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

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

您认为以上哪个想法对我们最有意义?有没有另一种解决方案,我错过了?

+1

我想,你煮熟了。首先,将WAP转换为WSP是最糟糕的想法。是的,您可以在同一个项目中使用“WebForms”和“MVC”。当然不是,而是一般。您创建proj作为WAP,然后引用MVC库。然后转到'proj'文件并添加模板ID。这样你就拥有了MVC项目的全部功能。但在你的情况下,你使用2种不同的语言。您可以将这些作为亲子应用程序运行。谷歌关于如何设置父子asp.net应用程序。在父母 - 孩子中,他们可以拥有两种不同的语言,但共享相同的安全等。 –

+0

有了父母子女,您也可以运行不同版本的.net。只需要一些额外的配置。阅读ASP.NET 4子应用程序无法在ASP.NET 2.0或ASP.NET 3.5应用程序下启动时:http://www.asp.net/whitepapers/aspnet4/breaking-changes –

+0

这听起来基本上就像我列出的第4个选项。对我们来说可能是最痛苦的。谢谢,我会阅读儿童申请。 –

回答

1

经过一些调查研究和实验(并感谢来自TS建议)我已经把范围缩小到无论是2或4选项从我最初的问题:

  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管理器转换为应用程序。子应用程序可以是使用不同默认语言(C#vs VB.NET)的WAP。这使得从现有项目中分离出来更容易。但是这也是一个缺点,因为MVC路由只适用于子应用程序子文件夹中的URL。因此,如果我们希望我们网站的多个部分使用MVC路由,则需要单独的子项目,例如, (/ cart,/ myaccount等)

我们可能会沿着选项#1的路径转换为WSP,如果遇到很大的障碍,则只能使用#2。


更新:我能够做到用技术#1的转换。现在已经工作了好几个月,所以我用我遵循的程序发布了一个blog post

-1

你有3个选择这里:

  1. 转换从VB的ASP.NET Web表单到C#
  2. 转换你的MVC 4用C#编写到VB。
  3. 再开发在ASP.NET Web表单所有的旧应用程序来MVC 4(难看,但为了更好的未来变化)

我的建议是让他们diferent项目只分享你的业务逻辑。并在同一个解决方案文件中。

+0

不好选择 –

+0

我没有说美丽和简单的选择。有时你必须忍受隧道尽头的光线。 – mijail

+1

应用程序迁移是痛苦的,到处都是问题。 – mijail

0

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

  1. 创建新的MVC的C#项目
  2. 老VB项目添加到解决方案。
  3. 移动VB aspx页面到新的C#项目
  4. REMOVE背后属性的代码FROM THE VB PAGES如...代码隐藏= “ProductDetails.aspx.vb” 的第一行(这是魔法)
  5. 一个参考VB项目添加在C#项目
  6. 这会为母版页的工作以及

奇怪的VB aspx页面“只要找到”从参考代码隐藏和C#项目似乎并不关心VB的aspx页面。

去图!

希望我救了人一些时间。我在这上面花了很多时间。

+0

纠正我,如果我错了,但不是这种技术把应用程序放在一个子文件夹,而不是根?如果目标是实现无缝转换,并且只需在现有站点的URL结构中允许新的MVC页面,则这可能是不可接受的。 –

+0

另外,请记住,根据现有VB.NET Web应用程序项目的复杂性,您可能必须处理非页面类文件,页面间引用和.asmx Web服务,这些服务会带来特殊的转换挑战。这些在我在http://blog.webnames.ca/updating-vb-net-asp-net-web-application-project-support-c-mvc/上开发的过程中得到解决。 –

+0

你有一个应用程序(MVC应用程序)。 VB页面被复制到该应用程序(不带代码)。然后,您可以按原样使用它们,或者在我的情况下,使用jquery加载到div和新的MVC页面中,将特征添加到页面中 –

相关问题