以前はループ内で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);
}
}
'CreateMethodInfo'とは何ですか? - 公式の枠組みのようには見えない。とにかく、あなたがしたことが文字通りパラメータを追加したのであれば、最も可能性の高い説明は、 'Control'の定義が見つからないということです。おそらく、メソッド参照を要求する前に、アセンブリ参照を明示的に追加する必要があります。 –
@ 500-InternalServerError、回答が更新されました。 –