【问题标题】:Can I let the code-behind file for a WCF service be a T4 file?我可以让 WCF 服务的代码隐藏文件成为 T4 文件吗?
【发布时间】:2012-05-19 20:13:02
【问题描述】:

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

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

【问题讨论】:

  • +1 用于澄清。下面的新答案:)

标签: c# wcf visual-studio-2010 t4 code-behind


【解决方案1】:

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

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

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

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

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

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

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

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

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

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

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

额外技巧:

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

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

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

<#@ template language="C#" #>
<#@ output extension="config" #>

【讨论】:

  • 看起来 Visual Studio 不允许我重命名 .svc.cs 文件。在上下文菜单中没有“重命名”选项。
  • 而不是重命名,而是按照他在帖子中的解释执行“打开文件 > 另存为...”。
  • 我认为我的问题存在误解。我没有在我的项目中使用任何 WCF 代理,我正在编写 WCF 服务。该服务由 .svc 及其代码隐藏文件 .svc.cs 定义。 .svc 没有自定义工具选项集 AFAICT。
  • 既然您已经澄清了问题,我将很快修改或删除此答案。也许你无论如何都可以问另一个(客户)问题,我会在那里复制这个答案?这也是一个好问题:)
【解决方案2】:

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

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

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

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

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

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

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

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

额外技巧:

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

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

【讨论】:

  • 谢谢,这似乎工作得很好!我的问题是 .svc.tt 文件的内容在 VStudio 中没有突出显示为 C# 的语法,但我想这是另一个问题 :)
  • tt 文件默认不被 VS 识别。至少有一个插件允许 tt 文件语法突出显示,但您也可以将 tt 扩展名添加到 C# 文件扩展名列表中(不知道在哪里可以做到这一点)。
  • 我找到了有形 T4 编辑器,但它不会自动缩进 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多