c# - 如何在 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 语法。如何启用它?
解决方案
使用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>
推荐阅读
- c# - 如何在 Thrift 中使用服务作为类型
- bash - 签入目录中的元素是目录或文件
- batch-file - adding a new column to csv and populate the values alternatives
- javascript - Disabling third party cookies as per GDPR compliance
- html - Bootstrap 4 模态中心内容
- clojure - 我无法让 compojure-api 正确验证具有 Inst 模式的查询参数的错误数据
- sql-server - i want to limit the data inserting into database table on give date and time only 12
- sql - Oracle 索引时间戳
- java - 在 JGIT 中创建分支时出现 RefNotFoundException
- c# - 在 C# 中将时间数据转换为本地时间