1

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

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

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

有谁知道是否可以从 2 个项目中为 1 个区域提供服务?

4

2 回答 2

0

我不得不通过在 VB.Net 项目的区域注册中创建一条路线来解决这个问题。

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

于 2013-06-11T14:32:52.243 回答
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# 项目的默认命名空间不同,因此如果您同时使用两者,则需要保持一致。

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

Namespace Areas.Users.Controllers

映射到MyCompany.MyAmazingVBProject.Areas.Users.Controllers,而 C# 中的等效命名空间将具有以下代码:

namespace MyCompany.MyAmazingCSProject.Areas.Users.Controllers { ... }
于 2013-07-19T09:02:20.510 回答