我刚刚将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为我的解决方案正确生成命名空间?
答案 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);