I ran it on .NET 4 under vs2010 and the code does not work at all.

Interestingly - for completely different reasons:

Unhandled Exception: System.TypeInitializationException: The type initializer for 'ConsoleApplication9.Program' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Castle.DynamicProxy.Generators.Emitters.StrongNameUtil' threw an exception. ---> System.NotSupportedException: The Deny stack modifier has been obsoleted by the .NET Framework. Please see http://go.microsoft.com/fwlink/?LinkId=155571 for more information. at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark)
   at System.Security.CodeAccessPermission.Demand()
at Castle.DynamicProxy.Generators.Emitters.StrongNameUtil..cctor() in c:\TeamCity\buildAgent\work\f0c43d96621436a8\src\Castle.Core\DynamicProxy\Generators\Emitters\StrongNameUtil.cs:line 40
   --- End of inner exception stack trace ---
at Castle.DynamicProxy.Generators.Emitters.StrongNameUtil.get_CanStrongNameAssembly() at ConsoleApplication9.Program.tuneDynamicProxy() in c:\users\xtoff\documents\visual studio 2010\Projects\ConsoleApplication9\ConsoleApplication9\Program.cs:line 58 at ConsoleApplication9.Program..cctor() in c:\users\xtoff\documents\visual studio 2010\Projects\ConsoleApplication9\ConsoleApplication9\Program.cs:line 52
   --- End of inner exception stack trace ---
   at ConsoleApplication9.Program.Main(String[] args)

Notice it fails even before any attempt to generate the proxy.
Anyway - I remember there was some bug in VS2008 debugger, so you may have hit just that.

Which version of DP are you running?


On 12/10/2010 10:33 PM, Konstantin wrote:
Following code causes exception if executed under VS2008 debugger.

Exception:
System.TypeLoadException: GenericArguments[0], 'ST2', on
'Castle.Proxies.Invocations.IService_Method2[ST1]' violates the
onstraint of type parameter 'ST1'.
    at Castle.Proxies.IServiceProxy.Method2[ST2](ST2 t)
    at DPGenericsUnderDebugIssueDemo.Program.Main(String[] args) in C:
\WORK\TestsAndTries\DPGenericsUnderDebugIssueDemo
\DPGenericsUnderDebugIssueDemo\Program.cs: line 61


This:
"GenericArguments[0], 'ST2', on
'Castle.Proxies.Invocations.IService_Method2[ST1]'"
looks very strange....


If executed without debugger it work ok.


     public class C : ICloneable
     {
         public object Clone()
         {
             throw new NotImplementedException();
         }
     }


     public interface IService
     {
         void Method1<ST1>(ST1 t) where ST1 : class, new();
         void Method2<ST2>(ST2 t) where ST2 : ICloneable;
     }

     public class Component : IService
     {
         public void Method1<CT1>(CT1 t) where CT1 : class, new()
         {
             Console.WriteLine(string.Format("Method1 CT1:{0}", typeof
(CT1)));
         }

         public void Method2<CT2>(CT2 t) where CT2 : ICloneable
         {
             Console.WriteLine(string.Format("Method2 CT2:{0}", typeof
(CT2)));
         }
     }

     internal class Program
     {
         [SecurityPermission(SecurityAction.Deny, Unrestricted = true,
Flags = SecurityPermissionFlag.UnmanagedCode)]
         private static void tuneDynamicProxy()
         {
             Console.WriteLine(StrongNameUtil.CanStrongNameAssembly);
         }


         static Program()
         {
             //Restrict signed assembly generation
             tuneDynamicProxy();
         }

         private static void Main(string[] args)
         {
             ProxyGenerator g = new ProxyGenerator();
             var proxy = g.CreateInterfaceProxyWithTarget<IService>(new
Component(), new IInterceptor[0]);


             try
             {
                 proxy.Method1(new C());
                 proxy.Method2(new C());
             }
             catch (Exception e)
             {
                 Console.WriteLine(e);
             }
             finally
             {
                 Console.ReadLine();
             }
         }
     }


--
You received this message because you are subscribed to the Google Groups "Castle 
Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en.

Reply via email to