-
Notifications
You must be signed in to change notification settings - Fork 484
Open
Labels
Description
@GeeWee posted a bug report at devlooped/moq#991 which basically boils down to this:
using Azure.Storage.Blobs.Specialized; // from NuGet package 'Azure.Storage.Blobs'
using Castle.DynamicProxy;
public class Bork : BlockBlobClient { }
class Program
{
static void Main()
{
var generator = new ProxyGenerator();
_ = generator.CreateClassProxy<BlockBlobClient>(); // works
_ = generator.CreateClassProxy<Bork>(); // fails
}
}Proxying BlockBlobClient appears to work fine; proxying an empty subclass of it throws the following exception:
System.TypeLoadException: Method 'UploadInternal' on type 'Castle.Proxies.BorkProxy' from assembly 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is overriding a method that is not visible from that assembly.
at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
at System.Reflection.Emit.TypeBuilder.CreateTypeInfo()
at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.CreateType(TypeBuilder type)
at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType()
at Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateType(String name, Type[] interfaces, INamingScope namingScope)
at Castle.Core.Internal.SynchronizedDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Castle.DynamicProxy.Generators.BaseProxyGenerator.ObtainProxyType(CacheKey cacheKey, Func`3 factory)
at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors)
at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy[TClass](IInterceptor[] interceptors)
at Program.Main()
(It may or may not be relevant that PEVerify reports a bunch of invalid signatures in the netstandard2.0 DLL for that package:
[MD]: Error: Token 0x020000da following ELEMENT_TYPE_CLASS (_VALUETYPE) in signature is a ValueType (Class,respectively). [token:0x04000064]
[MD]: Error: Token 0x0200002c following ELEMENT_TYPE_CLASS (_VALUETYPE) in signature is a ValueType (Class,respectively). [token:0x0400006A]
[MD]: Error: Token 0x0200002c following ELEMENT_TYPE_CLASS (_VALUETYPE) in signature is a ValueType (Class,respectively). [token:0x0400006B]
... (a lot more of the same)