2016-05-18 18 views
3

以前はループ内でCreateMethodInfoの作業呼び出しがあり、メソッドシグネチャにはパラメータがありませんでした。問題のメソッドはパラメータを持つようにCreateMethodInfo:ファイルまたはアセンブリをロードできませんでした

は、今私は(パフォーマンス上の理由から)これを変更した、そしてそれは今、次のエラーメッセージで失敗しています:

ファイルまたはアセンブリ 「ファイルをロードできませんでした。 ///C:\Users\me\AppData\Local\Temp\qz5wsaeb.dll 'または のいずれかに依存します。

私はこれを呼んでいる:

var method = CreateMethodInfo(script, "Methods", "GetValue"); 
method.Invoke(null, new object[] { control }); 

スクリプトの値:

public class Methods 
{ 
    public static void GetValue(Control control) 
    { 
     // During runtime this part is dynamic and can change 
     control.Location = new System.Drawing.Point(165, 70); 
     control.Size = new System.Drawing.Size(204, 107); 
    } 
} 

私は私が間違ってやっているかを見ることができません。基本的には、メソッドを呼び出してパラメータ(この場合はコントロール)を渡したいと思います。

ありがとうございます。何か明白な点がある場合は、事前にお知らせください。

EDIT:CreateMethodInfo:

public static MethodInfo CreateMethodInfo(string script, string className, string methodName) 
     { 
     using (var compiler = new CSharpCodeProvider()) 
     { 
      var parms = new CompilerParameters 
      { 
       GenerateExecutable = false, 
       GenerateInMemory = true, 
       ReferencedAssemblies = { "System.Drawing.dll","System.Windows.Forms.dll" } 
      }; 
      return compiler.CompileAssemblyFromSource(parms, script) 
       .CompiledAssembly.GetType(className) 
       .GetMethod(methodName); 
     } 
     } 
+0

'CreateMethodInfo'とは何ですか? - 公式の枠組みのようには見えない。とにかく、あなたがしたことが文字通りパラメータを追加したのであれば、最も可能性の高い説明は、 'Control'の定義が見つからないということです。おそらく、メソッド参照を要求する前に、アセンブリ参照を明示的に追加する必要があります。 –

+0

@ 500-InternalServerError、回答が更新されました。 –

答えて

1

コンパイラは

Controlへの参照を解決できるようにするために、十分ではありませんあなたは正しく行っているとして、CompilerParameters構造に参照されるアセンブリの名前を追加します
public static void GetValue(Control control) 

あなたはこのように、スクリプトにusing文で参照されるアセンブリ名を追加する必要があり、次のいずれか

ご希望の場合は
using System.Drawing; 
    using System.Windows.Forms; 

    public class Methods 
    { 
     public static void GetValue(Control control) 
     { 
    ... 

か、他には、定義した名前空間でシンボル参照を修飾:

public class Methods 
    { 
     public static void GetValue(System.Windows.Forms.Control control) 
     { 
    ... 

ところで、あなたはリターンをCompileAssemblyFromSourceオブジェクト上Errorsプロパティを調べることで、問題を自分でこの種のトラブルシューティングを行うことができます。

関連する問題