T4MVC错误地为控制器生成名称空间

时间:2013-02-28 03:36:37

标签: asp.net-mvc asp.net-mvc-3 mvccontrib t4mvc

我刚刚将T4MVC(3.5.1)插入到我的ASP.NET MVC3项目中。

它似乎在* .generated.cs文件中生成了错误的命名空间。例如:

using System.Web;
using System.Web.Hosting;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Web.Mvc.Html;
using System.Web.Routing;
using T4MVC;

namespace MyCompany.MyCompany.MyProject.Web.Controllers
{
    public partial class HomeController
    {
        //snip

        [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
        public partial class T4MVC_HomeController : MyCompany.MyCompany.MyProject.Web.Controllers.HomeController
        {
            //snip
        }

        //snip
    }
}

在此生成的文件中,第一个MyCompany在智能感知中显示MyCompany.MyCompany,因此生成的命名空间正在尝试在MyCompany.MyCompany.MyCompany.MyProject.Web.Controllers.HomeController查找我的控制器,当然还有MyCompany.MyCompany不包含MyCompany

如何让T4MVC为我的解决方案正确生成命名空间?

1 个答案:

答案 0 :(得分:1)

David Ebbo指出我正确的方向,其他人在这里有同样的问题: https://t4mvc.codeplex.com/discussions/404550

我使用了那里提到的global::解决方案,具体而言,在T4MVC.tt第321行,我改变了:

public partial class <#=controller.DerivedClassName #> : <#=controller.FullClassName #>

public partial class <#=controller.DerivedClassName #> : global::<#=controller.FullClassName #>

编辑: 我还必须更新第1592行以考虑参数(我的模型具有相同的命名空间问题)。我做了一个快速而又肮脏的改变:

TT.Write(p.Type + " " + p.Name);

对此:

if (p.Type.StartsWith("FooBar"))
    TT.Write("global::" + p.Type + " " + p.Name);
else
    TT.Write(p.Type + " " + p.Name);