I decided to do some brute force testing of IKVM.Reflection. I ran my LinkerPrototype on almost all assemblies in the .NET and Mono GACs. This resulted in a number of fixes to the linker (but note that it's still just a toy) and a bunch of fixes to IKVM.Reflection. Most of these fixes aren't relevant for IKVM.NET, but I want IKVM.Reflection to be useful as a general System.Reflection replacement.
- MethodInfo.DeclaringType should return null for global generic method instances.
- Fixed support for TypeSpec in custom modifiers.
- Fixed bug that caused duplicate MethodSpec rows to be emitted.
- Fixed bug that caused duplicate MemberRef rows to be emitted.
- Allow use of generic method definition in IL stream.
- Made signature binding lazy for GenericMethodInstance.
- Allow declarative security attributes to use non-public constructors.
- Implemented ManifestResourceInfo.FileName property.
- Implemented workaround for incorrect exception table length in methods generated by VB compiler.
- Fixed exception filter block handling to support having both regular handlers and a filter for the same try block.
- Fixed metadata header to account for the actual ImageRuntimeVersion string length, instead of assuming it to be "v2.0.50727".
- Implemented __GetDeclaredMethods() for ArrayType and MultiArrayType.
- Fixed two MarshalSpec blob parsing bugs.
- Fixed several places where generic type definitions would be encoded as TypeDef token instead of TypeSpec.
- Re-instroduced generic type instantation for "identity" instantations of TypeBuilder types.
- Several fixes for C++/CLI that tends to stick custom modifiers everywhere. Also, support void& in local variable signature.
- Support fields that have an RVA, but where it is set to zero (C++/CLI does this).
- Added support for a TypeRef with a null ResolutionScope.
The source is available in cvs and the LinkerPrototype zip link above contains the most recent IKVM.Reflection.dll, but if you want just the IKVM.Reflection.dll binary, it is available here: ikvm-reflect-0.43.3833.zip