1

在 Visual Studio 2010 中创建 WCF 服务(文件类型 .svc)时,我想将 C# 代码隐藏文件(.svc.cs)制作成 T4 文件(.tt)。如果可能的话,我该怎么做?

编辑: 请注意,我正在编写 WCF 服务本身,而不是客户端。

4

2 回答 2

1

这个答案是正确的,但不适用于所提出的问题

感谢您澄清问题,添加了新答案 - 这将被移动/删除:)

理论上,您可以使用 TT 文件生成任何类型的文本文件。我们用它来生成数据库脚本、配置文件等(微软用它来生成各种代理)。

您遇到的问题是最初也会生成服务引用的 Reference.cs 文件,因此您也必须停止该过程。

  • 单击解决方案浏览器中的“显示所有文件”按钮。这将公开底层的 Reference.cs 文件。

  • 打开 reference.cs 文件并将其保存为 .TT 扩展名。这必须首先完成,因为以下步骤会导致 .cs 文件消失!

  • 将新的 Reference.tt 文件包含到项目中。

  • 从 Reference.svcmap 文件中删除“WCF 代理生成器”自定义工具选项。

  • 如果您处于源代码控制之下,请撤消对 Reference.cs 文件的任何挂起删除。此删除是由上一步自动引起的。

  • 确保 Reference.tt 文件的自定义构建选项是TextTemplatingFileGenerator. 当你重命名 cs 文件时,它应该默认添加这个

  • 将您要用于 TT 脚本的语言类型添加到 Reference.tt 文件的顶部(总是明确的):

    <#@ 模板语言="C#" #>

额外技巧:

当您使用 Visual Studio 2010 时,您还可以将模板上的自定义工具从 TextTemplatingFileGenerator 临时更改为 TextTemplatingFilePreprocessor。

这会将底层代码直接输出到您的项目中,而不是常规的模板输出!非常适合查看生成的代码。

注意:如果您不是将 .CS 文件作为输出,您还需要在脚本的第一个条目中指定输出文件名。例如,您在 TT 文件顶部所需的最小值将是:

<#@ template language="C#" #>
<#@ output extension="config" #>
于 2012-05-11T08:46:25.813 回答
1

根据问题的澄清更新了答案。

如果要对 service.svc.cs 文件进行模板化,请执行以下操作:

  • 打开 service.svc.cs 文件并将其保存为 .TT 扩展名。这将导致 svc.cs 文件自动消失(我假设是因为其中定义了类)。

  • 确保构建操作设置为“内容”。

  • 确保 service.svc.tt 文件的自定义构建选项是 TextTemplatingFileGenerator。

  • 将您要用于 TT 脚本的语言类型添加到 Reference.tt 文件的顶部(总是明确的):

    <#@ 模板语言="C#" #>

  • 在 .tt 文件打开时随时单击保存以(重新)生成输出 cs 文件。

我刚刚尝试并确认这些步骤适用于新的 WCF 服务项目。

额外技巧:

当您使用 Visual Studio 2010 时,您还可以将模板上的自定义工具从 TextTemplatingFileGenerator 临时更改为 TextTemplatingFilePreprocessor。

这会将底层代码直接输出到您的项目中,而不是常规的模板输出!非常适合查看生成的代码。

于 2012-05-11T10:37:03.507 回答