C# Cake-实验开关编译错误

C# Cake-实验开关编译错误,c#,roslyn,cakebuild,C#,Roslyn,Cakebuild,我试图使用Cake Plist addin,但收到一个错误,即所使用的Roslyn版本中尚未实现dynamic。然后,从别人的建议中,我被告知尝试实验性的切换。当使用开关时,当它试图编译构建脚本时,我收到以下错误 Error: Microsoft.CodeAnalysis.Scripting.CompilationErrorException: (2,1): error CS0656: Missing compiler required member 'Microsoft.CSharp.Runt

我试图使用Cake Plist addin,但收到一个错误,即所使用的Roslyn版本中尚未实现dynamic。然后,从别人的建议中,我被告知尝试实验性的切换。当使用开关时,当它试图编译构建脚本时,我收到以下错误

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"

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

您可以使用反射而不是动态。有点不优雅,但避免了

将写如下

#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);
    });

听起来您需要针对更高版本的框架(包括该方法)进行编译,可能您缺少对Microsoft.CSharp.dll的引用?您解决了在不同平台上引用不同程序集的问题了吗?我也在这一点上。呃,不,我偏离了方向,实际上再也没有回到这一点上。抱歉:(好的,谢谢@wilson。我得到了一个对我有用的解决方案,并把它写成了一个答案:谢谢,这让我走上了解决问题的轨道。
var-plist=File(project.Path.GetDirectory()+“/info.plist”);
var-data=(Dictionary)反序列化plist(plist);
var-bundleId=data[“CFBundleIdentifier”].ToString();