У меня есть зарегистрированный тип, который в данный момент доступен в 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 и запуск моей настоящей программы дают разные результаты?