diff --git a/src/NHibernate.Test/StaticProxyTest/StaticProxyFactoryFixture.cs b/src/NHibernate.Test/StaticProxyTest/StaticProxyFactoryFixture.cs index da3c5cde84f..dd7cd6931aa 100644 --- a/src/NHibernate.Test/StaticProxyTest/StaticProxyFactoryFixture.cs +++ b/src/NHibernate.Test/StaticProxyTest/StaticProxyFactoryFixture.cs @@ -37,6 +37,13 @@ public class InternalInterfaceTestClass : IInternal public virtual int Id { get; set; } } + [Serializable] + internal class InternalTestClass + { + int Id { get; set; } + string Name { get; set; } + } + public interface IPublic { int Id { get; set; } @@ -517,6 +524,32 @@ public void VerifyProxyForAbstractClass() Assert.That(proxy, Is.Not.Null); Assert.That(proxy, Is.InstanceOf()); Assert.That(proxy, Is.InstanceOf()); +#if NETFX + }); +#endif + } + + [Test] + public void VerifyProxyForInternalClass() + { + var factory = new StaticProxyFactory(); + factory.PostInstantiate( + typeof(InternalTestClass).FullName, + typeof(InternalTestClass), + new HashSet { typeof(INHibernateProxy) }, + null, null, null, true); + +#if NETFX + VerifyGeneratedAssembly( + () => + { +#endif + var proxy = factory.GetProxy(1, null); + Assert.That(proxy, Is.Not.Null); + Assert.That(proxy, Is.InstanceOf()); + + Assert.That(factory.GetFieldInterceptionProxy(), Is.InstanceOf()); + #if NETFX }); #endif diff --git a/src/NHibernate/Proxy/FieldInterceptorProxyBuilder.cs b/src/NHibernate/Proxy/FieldInterceptorProxyBuilder.cs index 29bd50d4ef4..314644f121c 100644 --- a/src/NHibernate/Proxy/FieldInterceptorProxyBuilder.cs +++ b/src/NHibernate/Proxy/FieldInterceptorProxyBuilder.cs @@ -56,6 +56,11 @@ public static TypeInfo CreateProxyType(System.Type baseType) var name = new AssemblyName(assemblyName); var assemblyBuilder = ProxyBuilderHelper.DefineDynamicAssembly(AppDomain.CurrentDomain, name); + +#if NETFX || NETCOREAPP2_0 + if (!baseType.IsVisible) + ProxyBuilderHelper.GenerateInstanceOfIgnoresAccessChecksToAttribute(assemblyBuilder, baseType.Assembly.GetName().Name); +#endif var moduleBuilder = ProxyBuilderHelper.DefineDynamicModule(assemblyBuilder, moduleName); const TypeAttributes typeAttributes = TypeAttributes.AutoClass | TypeAttributes.Class | TypeAttributes.Public | TypeAttributes.BeforeFieldInit; diff --git a/src/NHibernate/Proxy/NHibernateProxyBuilder.cs b/src/NHibernate/Proxy/NHibernateProxyBuilder.cs index 607e548c4f0..96c530f940c 100644 --- a/src/NHibernate/Proxy/NHibernateProxyBuilder.cs +++ b/src/NHibernate/Proxy/NHibernateProxyBuilder.cs @@ -78,9 +78,10 @@ public TypeInfo CreateProxyType(System.Type baseType, IReadOnlyCollection !i.IsVisible) - .Select(i => i.Assembly.GetName().Name) - .Distinct(); + new[] {baseType} + .Concat(interfaces).Where(i => !i.IsVisible) + .Select(i => i.Assembly.GetName().Name) + .Distinct(); foreach (var a in assemblyNamesToIgnoreAccessCheck) ProxyBuilderHelper.GenerateInstanceOfIgnoresAccessChecksToAttribute(assemblyBuilder, a); #else