Skip to content

Commit 7558ed9

Browse files
committed
support sign assembly
1 parent b0b2906 commit 7558ed9

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed

ExpressionDebugger/DebugInfoInjector.cs

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

ExpressionDebugger/ExpressionDebugger.csproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,12 @@
2727
<PackageReference Include="System.Reflection.TypeExtensions" Version="4.3.0" />
2828
</ItemGroup>
2929

30+
<ItemGroup>
31+
<None Remove="mock.keys" />
32+
</ItemGroup>
33+
34+
<ItemGroup>
35+
<EmbeddedResource Include="mock.keys" />
36+
</ItemGroup>
37+
3038
</Project>

ExpressionDebugger/mock.keys

596 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)