Asp.net mvc 你能把一个MVC区域分成两个项目吗?

Asp.net mvc 你能把一个MVC区域分成两个项目吗?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-areas,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Areas,我有一个用VB.Net编写的Asp.NETMVC3网站。我们想迁移到C#,计划是用C#编写所有新代码,并在修改时重写旧代码 我在解决方案中创建了一个新的C#MVC3项目。在这个项目中,我使用RazorGenerator来帮助将视图编译成最终的程序集。我引用了VB中的C#项目。VB项目作为主站点运行 这套装置90%运行良好。但是,如果VB项目中已经存在一个区域,我似乎无法在C#项目中扩展它。似乎整个区域必须存在于一个项目或另一个项目中 有人知道是否可以从两个项目中为一个区域提供服务吗?我必须通过在

我有一个用VB.Net编写的Asp.NETMVC3网站。我们想迁移到C#,计划是用C#编写所有新代码,并在修改时重写旧代码

我在解决方案中创建了一个新的C#MVC3项目。在这个项目中,我使用RazorGenerator来帮助将视图编译成最终的程序集。我引用了VB中的C#项目。VB项目作为主站点运行

这套装置90%运行良好。但是,如果VB项目中已经存在一个区域,我似乎无法在C#项目中扩展它。似乎整个区域必须存在于一个项目或另一个项目中


有人知道是否可以从两个项目中为一个区域提供服务吗?

我必须通过在VB.Net项目的区域注册中创建一个路由来解决这个问题


C#项目中的区域注册文件需要删除,而VB.Net项目中的路由使用的URL模式略有不同。创建新路由时,需要设置C#控制器所在的名称空间。新路由也需要在该区域的默认路由之前声明。

这是完全可能的,并且您所做的是正确的。我猜你的路线设置不正确。您必须在VB项目的路由中指定名称空间

在您的注册代码中:

Public Overrides Sub RegisterArea(ByVal context As AreaRegistrationContext)
    context.MapRoute(
        "Users_default",
        "Users/{controller}/{action}/{id}",
        New With {.action = "Index", .id = UrlParameter.Optional},
        New String() {"MyCompany.MyAmazingCSProject.Areas.Users.Controllers", 
                      Me.GetType().Namespace}
    )
End Sub
请记住VB名称空间增加了根名称空间的复杂性,根名称空间的工作方式与C#项目的默认名称空间不同,因此如果同时使用这两个名称空间,则需要保持一致

根命名空间为MyCompany.MyAmazingVBProject的VB项目在代码中具有此命名空间:

Namespace Areas.Users.Controllers
映射到MyCompany.MyAmazingVBProject.Areas.Users.Controllers,而C#中的等效名称空间将包含以下代码:

namespace MyCompany.MyAmazingCSProject.Areas.Users.Controllers { ... }