gpt4 book ai didi

c# - 如何在 T4 模板中使用 C# v6 的最新功能?

转载 作者:可可西里 更新时间:2023-11-01 02:59:16 24 4
gpt4 key购买 nike

我正在尝试在 Visual Studio 2015 中运行一个新的 T4 模板。但是它无法在这一行编译:

var message = $"Linked table '{linkedTable}' does not exist.";

编译器报告“$”字符是意外的。然而,根据新的 string interpolation,此语法在 C# v6 中应该有效。功能指南。

有没有办法让 T4 模板引擎使用更新的 C# 版本,除了在外部库中编译我的代码

更新:

这里是文件的声明元素,作为引用:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".sql" #>
<#@ SqlModelDirective processor="SqlModelDirectiveProcessor" #>

<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="Microsoft.SqlServer.Dac" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="Microsoft.SqlServer.Dac.Model" #>

除了 SqlModelDirective 元素,我认为这是非常标准的。

最佳答案

您现在不能在 T4 模板中使用 C# 6,因为它们不使用最新的编译器。

您可以在 templatecompilerOption 属性中指定编译器选项指示。如果使用最新的编译器,您可以使用:

<#@ template debug="false" hostspecific="false" language="C#" 
compilerOptions="/langversion:6" #>

当我尝试这样做时,出现以下错误:

Compiling transformation: Invalid option '6' for /langversion; must be ISO-1, ISO-2, 3, 4, 5 or Default

更新

找到 this discussion在 Github 上的 ASP.NET 存储库上。似乎 ASP.NET 团队正在寻求用 Razor 替换 T4(顺便说一句,这不是一个坏主意)。想知道@davidfowl 是否有更多信息;)

更新 2

大卫·福勒 responded on Twitter - T4 使用尚未更新为使用 Roslyn 的 CodeDom。虽然有一个 带有 replacement CodeDom providers 的 NuGet 包,它仅适用于 ASP.NET 4.x 项目,不适用于 T4。

所以目前 T4 中没有 C# 6。

关于c# - 如何在 T4 模板中使用 C# v6 的最新功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32505209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com