FAKE构建WPF项目遇C#语法兼容问题,如何指定编译器版本?
这确实是C#版本兼容的问题——你用到的if (value is Datatype variable)是C# 7.0引入的模式匹配特性,FAKE默认的编译配置大概率没开启对应版本的语法支持,或者调用了比VS更旧的MSBuild工具链。下面给你两种可行的解决思路:
1. 直接在FAKE脚本中指定C#语言版本
不管用的是旧版的MSBuild任务还是新版的DotNet API,都可以通过添加LangVersion属性强制编译器启用对应版本的语法。
用FAKE的MSBuild任务(旧版风格)
Target.create "Build" (fun _ -> // 匹配你的项目文件路径 !! "**/*.csproj" |> MSBuild.runRelease id [ "LangVersion", "latest" // 自动用当前工具链支持的最高版本,也可以写具体版本比如"7.0" "Configuration", "Release" ] |> ignore )
用FAKE的DotNet API(新版推荐)
open Fake.DotNet Target.create "Build" (fun _ -> DotNet.build (fun opts -> { opts with Configuration = DotNet.Release MSBuildParams = { opts.MSBuildParams with Properties = [("LangVersion", "latest")] } }) "YourSolution.sln" )
2. 让FAKE使用和VS一致的MSBuild版本
如果单纯指定语言版本还不行,那大概率是FAKE默认调用了旧版MSBuild(比如.NET Framework自带的老版本)。你可以强制FAKE使用VS安装目录里的新版MSBuild:
open Fake.DotNet Target.create "Build" (fun _ -> DotNet.build (fun opts -> { opts with Configuration = DotNet.Release // 指定VS版本,比如VS2022,FAKE会自动找到对应路径 MSBuildParams = { opts.MSBuildParams with Version = MSBuildVersion.VS2022 Properties = [("LangVersion", "latest")] } }) "YourSolution.sln" )
如果自动识别路径有问题,还可以手动指定MSBuild的完整路径:
open Fake.DotNet // 替换成你自己的VS安装路径 let msbuildPath = @"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" Target.create "Build" (fun _ -> DotNet.build (fun opts -> { opts with Configuration = DotNet.Release MSBuildPath = Some msbuildPath MSBuildParams = { opts.MSBuildParams with Properties = [("LangVersion", "latest")] } }) "YourSolution.sln" )
修改完脚本后,重新运行FAKE构建命令,应该就能正常编译使用了C# 7.0+特性的代码了。
内容的提问来源于stack exchange,提问作者Gonzo Gonzales
相关产品推荐
相关产品推荐

