Как использовать синтаксис C # 6 в встроенных задачах msbuild? - PullRequest
0 голосов
/ 05 июля 2018

Пожалуйста, рассмотрите следующую встроенную задачу:

<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 голосов
/ 05 июля 2018

CodeTaskFactory использует CodeDom для компиляции кода C #, который не реализует более новые версии C #.

MSBuild 15.8 (в предварительном просмотре на момент написания) появился новый RoslynCodeTaskFactory, использующий компилятор roslyn для компиляции кода, который позволяет использовать текущую версию C #, которая содержится в дистрибутиве MSBuild / Visual Studio:

<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>
...