2016-08-12 4 views
3

Cake-Plistアドインを使用しようとしていて、使用されていたRoslynのバージョンでまだ動的が実装されていないというエラーが表示されました。その後、誰か他の人のためのアドバイスから、実験的なスイッチを試すように言われました。スイッチを使用しているときに、ビルドスクリプトをコンパイルしようとしているときに、次のエラーが表示されます。Cake-Experimental Switchコンパイルエラー

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() 

誰でもこのエラーの原因を知っていますか?

+0

あなたが(そのメソッドが含まれる)のフレームワークの新しいバージョンに対してコンパイルする必要があるような音 – SLaks

+0

たぶん、あなたはMicrosoft.CSharp.dllへの参照が不足していますか? – svick

答えて

3

マック(OSXエルキャピタン)上でそれを実行しているとき、私は同様の問題がありました。

Microsoft.CSharp.dllは私のMS Windowsインストール以外の場所では見つかりませんでした。ビルドするために、私のプロジェクトに依存関係として追加したくありませんでしたこれはマックのように。

しかし、Mono.CSharp.dll./tools/Cakeフォルダにダウンロードされていることに気付きました。これは、ほぼ同じ目的を果たしたので、私はどちらか動作しませんでした

#r "Mono.CSharp.dll"

でそれを参照しようとしました。私は

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

にそれを変更したときに、それは完全に働きました。

今私がする必要があるすべては、それが上で実行しているどのプラットフォームを決定し、正しい

#r "xxx.CSharp.dll"を使用している...

+0

異なるプラットフォームで異なるアセンブリを参照することを解決しましたか?私は同じ時点にいる。 –

+0

ughいいえ、私は横行してしまい、実際には戻ってこなかった。申し訳ありません:( – wislon

+1

OK、ありがとう@wilson。私は私のために働いて、答えとしてそれを書いた解決策があります:https://stackoverflow.com/a/45260186/1386540 –

2

あなたは反射の代わりにダイナミックを使用することができます。少しエレガントですが、issues referencing Microsoft.CSharp.dll and Mono.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); 
    }); 
+0

ありがとう、これは私の問題を解決するために軌道に乗った。 "var plist = File(project.Path.GetDirectory()+" /info.plist ");' 'var data =(Dictionary )DeserializePlist(plist);' 'var bundleId = data [" "CFBundleIdentifier "] .ToString();' –