컴파일 사용 후 반사를 사용하여 가이 매개 변수와 메소드를 호출 :CodeDomCompiler 어셈블리에게 내가 반에서 메서드를 호출하기 위해 노력하고있어
bool ApproveUser(Guid userId)
내가 어디의 .NET CodeDomCompiler
구성 요소를 사용하여 어셈블리를 컴파일하고 있습니다를 메서드를 포함하는 클래스가 상주하며 메서드가
{Void ApproveUser(System.String, Boolean ByRef, Boolean ByRef)}
으로 컴파일되고 있습니다. 이는 예상했던 것과 완전히 다른 것입니다. Guid
매개 변수에 대한 정상적인 동작입니까? 그런 식으로 변환 할 반환 형식? 어떤 힌트를 주셔서 감사합니다. 감사!
편집 : 메서드 호출 : 나는 방법을 기대
Guid request = new Guid("25867C0D-F2FB-6A6A-AC61-FF0000852B58");
object[] args = new object[1] { request };
object classInstance= compilerResults.CompiledAssembly.CreateInstance("FooClass");
MethodInfo methodInfo = classInstance.GetType().GetMethod("ApproveUser");
bool result = (bool)methodInfo.Invoke(classInstance, args);
성공적으로 전화를받을하는 대신 나는 다음과 같은 예외가 나타납니다
An exception of type 'System.Reflection.TargetParameterCountException' occurred in mscorlib.dll but was not handled in user code
Additional information: Parameter count mismatch.
편집 2 : 나는에서 매개 변수 유형을 변경 한 Guid
int
에 :
public bool ApproveUser(int smthg)
T
var methodInfo = classInstance.GetType()
.GetMethod("ApproveUser", new[] { typeof(Guid) });
당신의 방법은 개인의 시도가 지정되어있는 경우 BindingFlags
: 그는 컴파일 된 버전이
{Void ApproveUser(Int32, Boolean, Boolean ByRef, Boolean ByRef)}
두 개의 완전히 다른 방법을 찾고 있다고 생각합니다. –
"리플렉션에서 메서드를 호출하려고합니다."- 정확하게 표현하십시오. –
@SergeyBerezovskiy 나는 너무 생각했지만 그 중 하나의 메서드가 어셈블리 안에 있습니다. –