首页 > 解决方案 > 如何在 msbuild 内联任务中使用 C# 6 语法?

问题描述

请考虑以下内联任务:

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

标签: c#msbuildtask

解决方案


使用CodeTaskFactoryCodeDom 编译不实现较新 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>

推荐阅读