Cro*_*ono 17 .net c# t4 visual-studio visual-studio-2015
我正在尝试在Visual Studio 2015中运行新的T4模板.但是它无法在此行编译:
var message = $"Linked table '{linkedTable}' does not exist.";
Run Code Online (Sandbox Code Playgroud)
编译器报告'$'字符是意外的.但是,根据新的字符串插值功能指南,此语法应在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" #>
Run Code Online (Sandbox Code Playgroud)
除了SqlModelDirective
元素,我认为这是非常标准的.
Pan*_*vos 15
您现在不能在T4模板中使用C#6,因为它们不使用最新的编译器.
您可以compilerOption
在template指令的属性中指定编译器选项.如果使用了最新的编译器,您可以使用:
<#@ template debug="false" hostspecific="false" language="C#"
compilerOptions="/langversion:6" #>
Run Code Online (Sandbox Code Playgroud)
当我尝试这个时,我收到以下错误:
编译转换:/ langversion的选项'6'无效; 必须是ISO-1,ISO-2,3,4,5或默认值
UPDATE
在Github上的ASP.NET存储库中找到了这个讨论.似乎ASP.NET团队正在寻求用Razor取代T4(这不是一个坏主意BTW).不知道@davidfowl是否有更多信息;)
更新2
David Fowler 在Twitter上做出回应 --T4使用的CodeDom尚未更新为使用Roslyn.虽然是一个NuGet包与更换的CodeDOM提供商,它仅适用于ASP.NET 4.x的项目,而不是T4.
所以现在没有T4中的C#6.
Dou*_*las 10
您应该升级到2016年3月30日发布的Visual Studio 2015 Update 2,它引入了此类功能.在其他"其他变化"下:
增强的T4文本模板,以便它们现在支持C#6.0.
但是,Visual Studio 2015 Update 3中的功能再次中断.
归档时间: |
|
查看次数: |
2191 次 |
最近记录: |