请考虑以下内联任务:
<UsingTask TaskName="HelloWorld" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<Task>
<Reference Include="System.Core" />
<Using Namespace="Microsoft.Build.Framework" />
<Using Namespace="Microsoft.Build.Utilities" />
<Code Type="Fragment" Language="cs">
<![CDATA[Console.WriteLine($"Hello {0+1}");]]>
</Code>
</Task>
</UsingTask>
它无法编译-error CS1056: Unexpected character '$'
我想在这里使用C#6语法。如何启用它?
答案 0 :(得分:3)
CodeTaskFactory
使用CodeDom编译未实现较新C#版本的C#代码。
MSBuild 15.8(在撰写本文时为预览)中有一个新的RoslynCodeTaskFactory
,它使用roslyn编译器来编译代码,从而使您可以使用MSBuild / Visual Studio发行版中包含的当前C#版本:
<Project DefaultTargets="Build">
<UsingTask TaskName="HelloWorld" TaskFactory="RoslynCodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
<Task>
<Code Type="Fragment" Language="cs">
<![CDATA[Console.WriteLine($"Hello {0+1}");]]>
</Code>
</Task>
</UsingTask>
<Target Name="Build">
<HelloWorld />
</Target>
</Project>