使用 Cake 脚本定位多个框架

Targeting multiple frameworks with Cake script

一位同事最近使用新的 VS2017 .csproj 格式向我们的一个项目添加了 .NET Standard 支持:

这似乎破坏了我的脚本,因为我在使用 Cake MSBuild 别名 (http://cakebuild.net/api/Cake.Common.Tools.MSBuild/MSBuildAliases/C240F0FB) 时收到以下错误:

错误:项目 'C:\example\path\myproj.csproj' 以“.NETFramework,Version=v4.6.1”为目标。它不能被以“.NETStandard,Version=v1.6”为目标的项目引用。

Cake 是否支持使用新的 VS2017 项目格式针对多个框架进行构建?如果是这样,有没有办法使用可以传递给 MSBuild 别名的 MSBuildSettings 参数来做到这一点?非常感谢。

是的,Cake 完全支持使用最新的 .NET SDK 1.0.4 和 MSBuild 构建 VS2017 项目15.x。

Cake 本身是使用 Cake、VS2017 和 .NET Core SDK 1.0.4 构建的 https://github.com/cake-build/cake

使用 MSBuild 别名时,请通过设置 Tool version to MSBuildToolVersion.VS2017 确保您使用的是正确版本的 MSBuild。

MSBuild("./src/Cake.sln", 
    new MSBuildSettings { ToolVersion = MSBuildToolVersion.VS2017
});

如果您在非标准位置安装了 VS2017,则可以使用 VSWhere 工具和别名找到正确的 MSBuild 路径

#tool nuget:?package=vswhere 

DirectoryPath vsLatest = VSWhereLatest();

FilePath msBuildPathX64 = (vsLatest==null) ? null : vsLatest.CombineWithFilePath("./MSBuild/15.0/Bin/amd64/MSBuild.exe"); 

MSBuild("./src/Example.sln", 
    new MSBuildSettings { ToolPath = msBuildPathX64
}); 

阅读更多相关信息: http://cakebuild.net/blog/2017/03/vswhere-and-visual-studio-2017-support