如何在msbuild内联任务中使用C#6语法?

时间:2018-07-05 14:58:12

标签: c# msbuild task

请考虑以下内联任务:

<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语法。如何启用它?

1 个答案:

答案 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>