2013-02-28 105 views
1

我刚刚将T4MVC(3.5.1)插入到我的ASP.NET MVC3项目中。T4MVC错误地为控制器生成命名空间

它似乎是在* .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

既然你打开https://t4mvc.codeplex.com/workitem/20,我们可以继续讨论那边。 – 2013-02-28 21:46:37

+0

感谢超级速度响应大卫! – elwyn 2013-03-01 00:33:52

回答

1

大卫博我指出了正确的方向,别人已经在这里了同样的问题: 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);