1

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

4

1 回答 1

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);
于 2013-03-01T00:33:08.930 回答