我有一个用VB.Net编写的Asp.Net MVC 3网站。我们希望迁移到C#,计划是在C#中编写所有新代码,并在修改时重写旧代码。
我在解决方案中创建了一个新的C#MVC 3项目。在这个项目中,我使用Razor Generator来帮助将视图编译到生成的程序集中。我从VB引用了C#项目。 VB项目作为主站点运行。
此设置效果很好90%。但是,如果VB项目中已存在某个区域,我似乎无法在C#项目中扩展它。似乎整个区域必须存在于一个项目或另一个项目中。
有谁知道是否可以从2个项目中提供1个区域?
答案 0 :(得分:0)
我必须通过在VB.Net项目的区域注册中创建一条路线来解决这个问题。
需要删除C#项目中的区域注册文件,VB.Net项目中的路由使用略有不同的URL模式。在创建新路由时,需要设置C#控制器所在的命名空间。新路线也需要在该区域的默认路线之前声明。
答案 1 :(得分:0)
这是完全可能的,你正在做的是正确的。我猜想你的路线没有正确设置。您必须在VB项目的路由中指定名称空间。
在您的AreaRegistration代码中:
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 { ... }