2011-12-27 2 views
2

나는 현재를 통해 VB 코드에 액세스하는 등록 유형이 : 나는를 실행하려고 할 때,하지만 어떤 이유LINQPad의 반사가 실제로 보안과 다를 수 있습니다.

var progType = Type.GetTypeFromProgID(path); 
progInstance = Activator.CreateInstance(progType); 
progType.InvokeMember("Show", BindingFlags.InvokeMethod, null, progInstance, new object[] {parameters});

:

Dim prog As Object = CreateObject(sPath) 
prog.Show(parameters)

나는대로 C 번호에이를 다시 작성했습니다 메서드 표시, 존재하지 않는 것처럼 보입니다. 나는 그것이 MSDN에서이 행과 관련이있다 생각

var methods = progType.GetMethods().Where(m => m.Name.ToLower() == "show");

:

이 직접 실행 호출자에 대한 완전 신뢰가 필요합니다 LINQPad에서 다음 코드는 아무것도 내 응용 프로그램 결과에 그러나 방법을 보여줍니다. 이 멤버는 부분적으로 신뢰할 수있는 코드 나 투명 코드에서 사용할 수 없습니다.

내 방법에 SecurityCritical 속성을 추가하려고했지만 아무 것도 변경되지 않았습니다. .NET 보안에 익숙하지 않은 사람이 MSDN의 내용을 설명 할 수 있습니까? LINQPad에서 코드를 실행하고 실제 프로그램을 실행하면 다른 결과가 나타나는 이유는 무엇입니까?

Type _progType = Type.GetTypeFromProgID(path); 
System.Reflection.MethodInfo _MethodInfo = typeof(_progType).GetMethod("Show"); 
if (!ReferenceEquals(_MethodInfo, null)) 
{ 
// method is founded 
} 
else 
{ 
// method is not founded 
} 

주의! :

답변

1

은 내가 LINQPad의 App.config보고 그것을 알아 냈다 - 나는 내 자신의 App.config에 다음을 추가하는 데 필요한 :

<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
</startup> 
0

는 시도 이름은 "쇼"ou "쇼"??? 귀하의 코드에 OU 다르게 써주세요!

+0

당신은 _progType.GetMethod ("표시")을 의미? null를 돌려줍니다. – Craig

+0

메서드를 찾을 수 없으면 MethodInfo 개체에서 null이 반환됩니다. – LittleJC

관련 문제