После решения одной проблемы с IMetaDataImport я имею дело с другим довольно долго. Это с EnumGenericParams метод.
Метод выдает AccessViolationExpcetion, но это происходит только иногда . В других случаях метод возвращается из вызова без каких-либо проблем, но его параметры совпадают с параметрами, когда он вызывает исключение. Я не могу понять, почему только иногда.
Кроме того, AccessViolationExpcetion не может быть перехвачен оператором catch. При отладке в VS 2010 исключение TargetInvocationException сначала перехватывается с InnerException, установленным в AccessViolationExpcetion.
Определение IMetaDataImport2 и EnumGenericParams:
[ComImport]
[Guid("<valid GUID>")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[CLSCompliant(false)]
public interface IMetaDataImport2 : IMetaDataImport {
....
void EnumGenericParams(
[ComAliasName("HCORENUM*"), In, Out] ref IntPtr phEnum,
[ComAliasName("mdToken")] mdToken tk,
[ComAliasName("mdGenericParam*"), Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex=3)] mdToken[] rGenericParams,
[ComAliasName("ULONG")] uint cGenericParams,
[ComAliasName("ULONG*"), Out] out uint pcGenericParams
);
....
Метод, вызывающий:
metadataImport2.EnumGenericParams(ref pEnum, memberDef, null, 0, out genParamCount);
(Даже вызов с третьим параметром, отличным от NULL, а четвертый> 0 приводит к исключению.)
Проблема возникла, когда я переместил приложение из .NET 3.5 в .NET 4.
Спасибо за любую помощь!