我正在尝试将T4MVC模板添加到我的项目中,但我遇到了一些问题。我去了Codeplex并下载了the latest version of T4MVC,根据说明我刚将两个文件T4MVC.tt
和T4MVC.Settings.t4
复制到我的网络应用程序的根目录中。
我立刻遇到了以下错误:
来自T4MVC.cs
(生成的文件):
命名空间不能直接包含诸如字段或方法之类的成员
从T4MVC.tt
(代码生成模板):
编译转换:找不到类型或命名空间名称'ITextTemplatingEngineHost'(您是否缺少using指令或程序集引用? )
当我打开T4MVC.cs
时,它只包含一行:
ErrorGeneratingCode
我发现this post表示只是再次构建,但该解决方案无法解决我的问题 - 事实上,它并没有改变一件事。我该怎么办?
答案 0 :(得分:17)
好的,我明白了。问题是,自上次发布T4MVC软件包以来,微软改变了ITextTemplateHost
接口的位置,因此我需要导入另一个名称空间。此外,具有这些命名空间的.dll
文件不会导入默认的ASP.NET MVC模板项目中。这就是我做的工作:
添加对以下.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 )
确保在T4MVC.tt
中导入以下命名空间(只需按照文件中已有的语法)。
Microsoft.VisualStudio.TextTemplating
Microsoft.VisualStudio.TextTemplating.Interfaces
删除所有生成的代码文件(如果在解决方案资源管理器中展开T4MVC.tt
,则会显示这些文件。)
构建项目。如果没有生成文件,请打开T4MVC.tt
,修改内容,不保存并进行构建。应该这样做!
答案 1 :(得分:3)
作为此问题的补充,如果您刚安装了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具有使自己变脏的逻辑,所以即使你保存,你也会看到它被标记为未保存(这可以在设置文件中关闭)。
希望这有帮助!