我有一个注册的类型,目前通过VB代码访问:
Dim prog As Object = CreateObject(sPath)
prog.Show(parameters)
我已经将其重写为c#:
var progType = Type.GetTypeFromProgID(path);
progInstance = Activator.CreateInstance(progType);
progType.InvokeMember("Show", BindingFlags.InvokeMethod, null, progInstance, new object[] {parameters});
由于某些原因,当我尝试执行Show方法时,它看起来好像不存在。LINQPad中的以下代码显示了该方法,但在我的应用程序中没有任何结果:
var methods = progType.GetMethods().Where(m => m.Name.ToLower() == "show");
我认为这与MSDN中的这一行有关:
要求对直接调用者完全信任。此成员不能被部分可信或透明的代码使用。
我已经尝试添加SecurityCritical
属性到我的方法,但没有任何改变。我不太熟悉。net安全,有人能解释一下MSDN的意思吗,也许为什么在LINQPad中运行我的代码和运行我的实际程序会给出不同的结果?
我通过查看LINQPad App.config找到了答案——我需要将以下内容添加到我自己的App.config中:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
试一试:
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
}
注意! !名字是"秀"你的"秀"??