2012-05-11 6 views
0

私はSkype API(Skype4COM)でプログラムを書き、実行時コンパイルを行うことにしました。私の編集Skype APIのライブラリで使用することに決めてから、すべてが完璧に動作しました。 「メタデータファイル 'c:\ Users \Алексей\ Dropbox \ Skype Bot \ Skype Bot \ bin \ Debug \ Skype4COM.dll」を開くことができませんでした - 読み込みが試行されました不正な形式のプログラム ''があります。どのように私はそれを修正することができます?CompilerParametersクラスskype(Skype4COM)ライブラリエラー

public delegate object Do(); 
    protected static string Compile(string str) 
    { 
     try 
     { 
      var csc = new CSharpCodeProvider(new Dictionary<string, string> { { "CompilerVersion", "v3.5" } }); 
      CompilerParameters parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll", "System.dll", "SKYPE4COM.dll" }) { GenerateInMemory = true }; 
      //parameters.LinkedResources.Add("Skype4COM.dll"); 
      //parameters.EmbeddedResources.Add("SKYPE4COMLib.dll"); 
      //parameters.ReferencedAssemblies.Add(""); 

      CodeTypeReferenceExpression csSystemConsoleType = new CodeTypeReferenceExpression("System.Console"); 

      CompilerResults results = csc.CompileAssemblyFromSource(parameters, str); 

      if (results.Errors.Count >= 1) return results.Errors[0].ErrorText; 

      Type t = results.CompiledAssembly.GetType("Program"); 
      MethodInfo m = t.GetMethod("Method"); 

      Do DoMethod; 
      DoMethod = (Do)Delegate.CreateDelegate(typeof(Do), m); 
      return DoMethod().ToString(); 
     } 
     catch (Exception e) 
     { 
      return e.Message; 
     } 
    } 

答えて

1

まずDLLがregisteredされている確認してください。ここで は、コードがあります。

テストプロジェクトを作成し、Skype4COM.dllにCOM参照を追加すると、Visual StudioはinteropアセンブリInterop.Skype4COM.dllを作成します。そのファイルへの参照を追加する必要があります(たとえば、System.Core.dllへの参照を追加したのと同じです)。

+0

ありがとうございましたが、今度は「メタデータファイル 'Interop.Skype4COM.dll'が見つかりませんでした。 –

+0

@NegiRussian手動で作成する必要があります(ダミーVSプロジェクトを作成し、そのCOM参照を追加してinteropアセンブリをコピーすることをお勧めします)。 –

+0

このライブラリを登録し、新しいプロジェクトを作成して参照に追加しました。( –