代码之家  ›  专栏  ›  技术社区  ›  mark

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

  •  2
  • mark  · 技术社区  · 7 年前

    请考虑以下内联任务:

    <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 回复  |  直到 7 年前
        1
  •  3
  •   Martin Ullrich    7 年前

    这个 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>