Konstantin,
I don't think there's anything I can do. I was able to reproduce the
issue, and it looks like the debugger in .NET 3.5 gets confused about
which generic parameters belong to which method.
DP generates perfect code, and it if you run PeVerfiy (I did) it finds
no issue.
Your best option is to upgrade to .NET 4 where this bug does not exist.
cheers,
Krzysztof
On 15/10/2010 11:14 PM, Konstantin wrote:
Krzysztof,
Can you advice anything regarding the issue?
On 12 окт, 18:08, Konstantin<[email protected]> wrote:
I does not work fine with the call and target framework 3.5.
I've saved the generated assembly and referenced it instead of using
DP, and in this config it works.
So the problem occures when DP emits unsigned assembly under VS debug
and FW 3.5
On 12 окт, 17:46, Krzysztof Koźmic<[email protected]> wrote:
yes, when I remove the call all works fine.
On 12/10/2010 11:30 PM, Konstantin wrote:
Remove tuneDynamicProxy() call and restrict creation of signed
assemby in some other way. Issue can be repeoduced where DP creates
only unsigned assembly.
The check for whether to create unsigned assembly or not is based on
SecurityPermissionFlag.UnmanagedCode check.
On 12 окт, 16:55, Krzysztof Koźmic<[email protected]> wrote:
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
seehttp://go.microsoft.com/fwlink/?LinkId=155571formoreinformation.
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\G
enerators\Emitters\StrongNameUtil.cs:line
40
--- End of inner exception stack trace ---
at
Castle.DynamicProxy.Generators.Emitters.StrongNameUtil.get_CanStrongNameAss
embly()
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.