- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在 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,因为它们不使用最新的编译器。
您可以在 template 的 compilerOption
属性中指定编译器选项指示。如果使用最新的编译器,您可以使用:
<#@ 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/
我是一名优秀的程序员,十分优秀!