无法让T4MVC与VS2010和ASP.NET MVC 2一起使用

时间:2009-12-15 09:59:18

标签: asp.net-mvc visual-studio-2010 t4 t4mvc

我正在尝试将T4MVC模板添加到我的项目中,但我遇到了一些问题。我去了Codeplex并下载了the latest version of T4MVC,根据说明我刚将两个文件T4MVC.ttT4MVC.Settings.t4复制到我的网络应用程序的根目录中。

我立刻遇到了以下错误:

来自T4MVC.cs(生成的文件):

命名空间不能直接包含诸如字段或方法
之类的成员

T4MVC.tt(代码生成模板):

编译转换:找不到类型或命名空间名称'ITextTemplatingEngineHost'(您是否缺少using指令或程序集引用? )

当我打开T4MVC.cs时,它只包含一行:

ErrorGeneratingCode

我发现this post表示只是再次构建,但该解决方案无法解决我的问题 - 事实上,它并没有改变一件事。我该怎么办?

3 个答案:

答案 0 :(得分:17)

好的,我明白了。问题是,自上次发布T4MVC软件包以来,微软改变了ITextTemplateHost接口的位置,因此我需要导入另一个名称空间。此外,具有这些命名空间的.dll文件不会导入默认的ASP.NET MVC模板项目中。这就是我做的工作:

  1. 添加对以下.dll文件的引用(在括号中的机器上搜索路径):

    • Microsoft.VisualStudio.TextTemplating.10.0.dll( C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.TextTemplating.10.0 \ v4.0_10.0.0.0__b03f5f7f11d50a3a \ Microsoft。 VisualStudio.10.0.dll

    • Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll( C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ Microsoft.VisualStudio.TextTemplating.Interfaces.10.0 \ v4.0_10.0.0。 0__b03f5f7f11d50a3a \ Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll

  2. 确保在T4MVC.tt中导入以下命名空间(只需按照文件中已有的语法)。

    • Microsoft.VisualStudio.TextTemplating

    • Microsoft.VisualStudio.TextTemplating.Interfaces

  3. 删除所有生成的代码文件(如果在解决方案资源管理器中展开T4MVC.tt,则会显示这些文件。)

  4. 构建项目。如果没有生成文件,请打开T4MVC.tt,修改内容,不保存并进行构建。应该这样做!

答案 1 :(得分:3)

ADDENDUM - ASP.NET MVC 3 RTM

作为此问题的补充,如果您刚安装了ASP.NET MVC 3 RTM,则可能会遇到使用其中一个MVC 3候选版本创建的项目中的类似问题。

要解决:

确保使用NuGet安装了T4MVC.2.6.40或更高版本。

即,使用工具>>重新安装T4MVC图书馆包管理。在控制台中,键入:

uninstall-package t4mvc 

然后:

install-package t4mvc 

获取最新版本。

您现在可能在T4MVC.tt文件中收到以下错误:

A namespace cannot directly contain members such as fields or methods

打开文件,使其变脏(例如,通过删除带有波浪线的注释)然后关闭而不保存!请参阅David Ebbo的回答,t4mvc.tt需要变脏!

重新编译并获得生命。

答案 2 :(得分:2)

似乎你已经开始工作,但是我在这里补充几点。

关于导入Microsoft.VisualStudio.TextTemplating.Interfaces的需要,我在T4MVC.tt的顶部添加了关于它的评论。但是,很容易错过。

现在对于令人困惑的部分:虽然这些接口确实移动到Beta2中的那个不同的命名空间,但是T4团队改变了主意并决定将它们再次移回原始命名空间以避免混淆。所以当下一个RC构建出来时,这个命名空间就会消失。

关于导入DLL的需要,我很惊讶您需要这个,因为它对我来说没有它。

最后注意事项:在步骤#4中,如果你保存在这里,它应该是无害的。会发生什么事情是T4MVC具有使自己变脏的逻辑,所以即使你保存,你也会看到它被标记为未保存(这可以在设置文件中关闭)。

希望这有帮助!