8

我正在尝试将 T4MVC 模板添加到我的项目中,但遇到了一些问题。我去了 Codeplex 并下载了最新版本的 T4MVCT4MVC.tt ,并根据说明将这两个文件复制T4MVC.Settings.t4到我的 Web 应用程序的根目录中。

立即,我收到以下错误:

T4MVC.cs(生成的文件):

命名空间不能直接包含字段或方法等成员

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

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

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

ErrorGeneratingCode

我发现这篇文章建议只是重新构建,但该解决方案并不能解决我的问题 - 事实上,它并没有改变任何事情。我该怎么办?

4

3 回答 3

18

好的,我想通了。问题是,显然自从上次发布 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、编辑某些内容,不要保存和构建。应该这样做!

于 2009-12-15T10:22:30.207 回答
3

附录 - 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 需要变脏!

重新编译并开始生活。

于 2011-01-14T15:45:48.113 回答
2

看来你已经成功了,但让我在这里补充几点。

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

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

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

最后说明:在第 4 步中,如果您保存在这里应该是无害的。发生的情况是 T4MVC 具有保持自身脏的逻辑,因此即使您保存,您也会看到它被标记为未保存(这可以在设置文件中关闭)。

希望这可以帮助!

于 2009-12-19T19:34:21.333 回答