У меня есть элемент управления ActiveX .Net 2.0, который встроен в страницу HTML (в IE7).Я использую JavaScript для изменения его свойств и вызова методов.Все это нормально, пока я не вызову метод, который создает экземпляр класса с помощью Activator.CreateInstance (type).Я получаю следующее сообщение:
System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова.---> System.Security.SecurityException: запрос не выполнен.
..
..
Сбой действия: InheritanceDemand
Тип первого неудачного разрешения: System.Security.PermissionSet
Зона сборки, в которой произошел сбой, была следующей: Intranet
Класс, который я пытаюсь создать, имеет конструктор public без паролей и от того, что я 'Вы читали, в любом случае не должно быть проблем с отражением в типах, которые являются публичными?
Я сделал временное исправление с помощью утилиты конфигурации Microsoft .NET Framework, чтобы полностью изменить доверие к интрасети.См. здесь .
Как я могу изменить метод, класс или сборку, чтобы избежать необходимости конфигурировать каркас?
Несколько дополнительных пунктов:
- Элемент управления activex скомпилирован для .Net 2
- Его сборка не является строгой с именем
- Меня не беспокоит предоставление разрешений на отражение.
Спасибо
Обновление
Оказывается, проблема была не в отражении, а в вызове TypeDescriptor.GetAttributes, который вызвал исключение безопасности FileIOPermission.Я исправил это с помощью следующего кода:
Dim temp As New Security.Permissions.FileIOPermission(Security.Permissions.PermissionState.Unrestricted)
temp.Assert()
// Get attributes
System.Security.CodeAccessPermission.RevertAssert()
Теперь, если я установил группу кодов, назначенную строгому имени моей сборки, и установил разрешение на FullTrust ,все в порядке.
Тем не менее, я не могу точно настроить его, это либо FullTrust , либо выдается исключение (см. ниже).Даже набор разрешений Все не работает.
Исключение:
System.Security.SecurityException: Request failed.
at System.Reflection.CustomAttribute._CreateCaObject(Void* pModule, Void* pCtor, Byte** ppBlob, Byte* pEndBlob, Int32* pcNamedArgs)
at System.Reflection.CustomAttribute.CreateCaObject(Module module, RuntimeMethodHandle ctor, IntPtr& blob, IntPtr blobEnd, Int32& namedArgs)
at System.Reflection.CustomAttribute.GetCustomAttributes(Module decoratedModule, Int32 decoratedMetadataToken, Int32 pcaCount, RuntimeType attributeFilterType, Boolean mustBeInheritable, IList derivedAttributes)
at System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeType type, RuntimeType caType, Boolean inherit)
at System.RuntimeType.GetCustomAttributes(Type attributeType, Boolean inherit)
at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectGetAttributes(Type type)
at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetAttributes()
at System.ComponentModel.TypeDescriptor.TypeDescriptionNode.DefaultTypeDescriptor.System.ComponentModel.ICustomTypeDescriptor.GetAttributes()
at System.ComponentModel.TypeDescriptor.GetAttributes(Object component, Boolean noCustomTypeDesc)
at System.ComponentModel.TypeDescriptor.GetAttributes(Object component)
... GetAttributes
...
The action that failed was: InheritanceDemand
The type of the first permission that failed was: System.Security.PermissionSet
The Zone of the assembly that failed was: Intranet