Cake-Experimental Switch 编译错误

Cake -Experimental Switch Compile Error

我正在尝试使用 Cake-Plist 插件,但收到一条错误消息,指出动态尚未在正在使用的 Roslyn 版本中实现。然后从别人的建议中我被告知尝试 -Experimental 开关。使用开关时,我在尝试编译构建脚本时收到以下错误。

Error: Microsoft.CodeAnalysis.Scripting.CompilationErrorException: (2,1): error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
    at Microsoft.CodeAnalysis.Scripting.Script.CompilationError(DiagnosticBag diagnostics)
    at Microsoft.CodeAnalysis.Scripting.Script.GetExecutor(CancellationToken cancellationToken)
    at Microsoft.CodeAnalysis.Scripting.Script.Run(Object globals)
    at Microsoft.CodeAnalysis.Scripting.Script.Run(Object globals)
    at Cake.Scripting.Roslyn.Nightly.DefaultRoslynNightlyScriptSession.Execute(Script script)
    at Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath, IDictionary`2 arguments)
    at Cake.Commands.BuildCommand.Execute(CakeOptions options)
    at Cake.CakeApplication.Run(CakeOptions options)
    at Cake.Program.Main()

有谁知道导致此错误的原因吗?

需要添加参考 Microsoft.CSharp.dll。

#reference "Microsoft.CSharp.dll"

https://gitter.im/cake-build/cake?at=57add5a3364ad7fc5acdb660

我在 运行 Mac(OSX El Capitan)上遇到了类似的问题。

我在 Mac 的任何地方都找不到 Microsoft.CSharp.dll(除了在我的 MS Windows 安装中),并且不想将它作为依赖项添加到我的一个项目只是为了让它在 mac.

上像这样构建

但是,我注意到 Mono.CSharp.dll 正在下载到 ./tools/Cake 文件夹中。这大致用于相同的目的,所以我试图用

来引用它

#r "Mono.CSharp.dll"

那也没用。但是当我把它改成

#r "./tools/Cake/Mono.CSharp.dll"

效果很好。

现在我需要做的就是确定它 运行 在哪个平台上并使用正确的

#r "xxx.CSharp.dll"...

您可以使用反射而不是动态。不太优雅,但避免 .

The example可以这样写

#addin "Cake.Plist"

Task("update-ios-version")
    .Does(() =>
    {
        var plist = File("./src/Demo/Info.plist");
        var data = DeserializePlist(plist);

        var itemPropertyInfo = data.GetType().GetProperty("Item");
        itemPropertyInfo.SetValue(data, gitVersion.AssemblySemVer, new[] { "CFBundleShortVersionString" });
        itemPropertyInfo.SetValue(data, gitVersion.FullSemVer, new[] { "CFBundleVersion" });

        SerializePlist(plist, data);
    });