@@ -1444,24 +1444,44 @@ protected override Expression VisitUnary(UnaryExpression node)
14441444 return node . Update ( operand ) ;
14451445 }
14461446
1447- public Delegate Compile ( LambdaExpression node )
1447+ static ModuleBuilder mod ;
1448+ public Delegate Compile ( LambdaExpression node , AssemblyName an = null )
14481449 {
14491450#if NETSTANDARD1_3
14501451 return node . Compile ( ) ;
14511452#else
14521453
1453- var assemblyName = "m_" + Guid . NewGuid ( ) . ToString ( "N" ) ;
1454- var asm = AppDomain . CurrentDomain . DefineDynamicAssembly ( new AssemblyName ( assemblyName ) , AssemblyBuilderAccess . Run ) ;
1454+ if ( mod == null )
1455+ {
1456+ if ( an == null )
1457+ {
1458+ StrongNameKeyPair kp ;
1459+ // Getting this from a resource would be a good idea.
1460+ using ( var stream = Assembly . GetExecutingAssembly ( ) . GetManifestResourceStream ( "ExpressionDebugger.mock.keys" ) )
1461+ using ( var mem = new MemoryStream ( ) )
1462+ {
1463+ stream . CopyTo ( mem ) ;
1464+ mem . Position = 0 ;
1465+ kp = new StrongNameKeyPair ( mem . ToArray ( ) ) ;
1466+ }
1467+ var name = "ExpressionDebugger.Dynamic" ;
1468+ an = new AssemblyName ( name ) { KeyPair = kp } ;
1469+ }
14551470
1456- var daType = typeof ( DebuggableAttribute ) ;
1457- var daCtor = daType . GetConstructor ( new [ ] { typeof ( DebuggableAttribute . DebuggingModes ) } ) ;
1458- var daBuilder = new CustomAttributeBuilder ( daCtor , new object [ ] {
1459- DebuggableAttribute . DebuggingModes . DisableOptimizations |
1460- DebuggableAttribute . DebuggingModes . Default } ) ;
1461- asm . SetCustomAttribute ( daBuilder ) ;
1471+ var asm = AppDomain . CurrentDomain . DefineDynamicAssembly ( an , AssemblyBuilderAccess . Run ) ;
1472+
1473+ var daType = typeof ( DebuggableAttribute ) ;
1474+ var daCtor = daType . GetConstructor ( new [ ] { typeof ( DebuggableAttribute . DebuggingModes ) } ) ;
1475+ var daBuilder = new CustomAttributeBuilder ( daCtor ,
1476+ new object [ ] {
1477+ DebuggableAttribute . DebuggingModes . DisableOptimizations |
1478+ DebuggableAttribute . DebuggingModes . Default
1479+ } ) ;
1480+ asm . SetCustomAttribute ( daBuilder ) ;
1481+ mod = asm . DefineDynamicModule ( an . Name , true ) ;
1482+ }
14621483
1463- var mod = asm . DefineDynamicModule ( assemblyName , true ) ;
1464- var type = mod . DefineType ( "Program" , TypeAttributes . Public | TypeAttributes . Class ) ;
1484+ var type = mod . DefineType ( "T" + Guid . NewGuid ( ) . ToString ( "N" ) , TypeAttributes . Public | TypeAttributes . Class ) ;
14651485 var meth = type . DefineMethod ( "Main" , MethodAttributes . HideBySig | MethodAttributes . Public | MethodAttributes . Static ) ;
14661486
14671487 var injected = ( LambdaExpression ) Inject ( node ) ;
0 commit comments