在 Visual Studio 2010 中创建 WCF 服务(文件类型 .svc)时,我想将 C# 代码隐藏文件(.svc.cs)制作成 T4 文件(.tt)。如果可能的话,我该怎么做?
编辑: 请注意,我正在编写 WCF 服务本身,而不是客户端。
在 Visual Studio 2010 中创建 WCF 服务(文件类型 .svc)时,我想将 C# 代码隐藏文件(.svc.cs)制作成 T4 文件(.tt)。如果可能的话,我该怎么做?
编辑: 请注意,我正在编写 WCF 服务本身,而不是客户端。
这个答案是正确的,但不适用于所提出的问题!
感谢您澄清问题,添加了新答案 - 这将被移动/删除:)
理论上,您可以使用 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" #>
根据问题的澄清更新了答案。
打开 service.svc.cs 文件并将其保存为 .TT 扩展名。这将导致 svc.cs 文件自动消失(我假设是因为其中定义了类)。
确保构建操作设置为“内容”。
确保 service.svc.tt 文件的自定义构建选项是 TextTemplatingFileGenerator。
将您要用于 TT 脚本的语言类型添加到 Reference.tt 文件的顶部(总是明确的):
<#@ 模板语言="C#" #>
在 .tt 文件打开时随时单击保存以(重新)生成输出 cs 文件。
我刚刚尝试并确认这些步骤适用于新的 WCF 服务项目。
当您使用 Visual Studio 2010 时,您还可以将模板上的自定义工具从 TextTemplatingFileGenerator 临时更改为 TextTemplatingFilePreprocessor。
这会将底层代码直接输出到您的项目中,而不是常规的模板输出!非常适合查看生成的代码。