3

我正在尝试使用 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()

有谁知道是什么导致了这个错误?

4

3 回答 3

3

需要将引用添加到 Microsoft.CSharp.dll。

#reference "Microsoft.CSharp.dll"

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

于 2016-08-12T16:06:31.413 回答
3

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

于 2017-01-04T01:25:45.393 回答
2

您可以使用反射而不是动态。不那么优雅,但避免了引用Microsoft.CSharp.dllMono.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);
    });
于 2017-07-22T23:25:05.553 回答