Skip to content

Commit 6ef0b75

Browse files
committed
Add Mono.Cecil.WindowsPdb
1 parent 2540d92 commit 6ef0b75

18 files changed

+885
-24
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
bin
22
obj
3+
packages
34
*.suo
45
*.iml
56
*.user

Mono.Cecil.Cil/PortablePdb.cs

+1-12
Original file line numberDiff line numberDiff line change
@@ -311,23 +311,12 @@ public ImageDebugHeader GetDebugHeader ()
311311
TimeDateStamp = (int) module.timestamp,
312312
};
313313

314-
var buffer = new ByteBuffer ();
315-
// RSDS
316-
buffer.WriteUInt32 (0x53445352);
317-
// Module ID
318-
buffer.WriteBytes (module.Mvid.ToByteArray ());
319-
// PDB Age
320-
buffer.WriteUInt32 (1);
321-
// PDB Path
322314
var filename = writer.BaseStream.GetFileName ();
323315
if (!string.IsNullOrEmpty (filename))
324316
filename = Path.GetFileName (filename);
325317

326-
buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (filename));
327-
buffer.WriteByte (0);
318+
var data = Mixin.GetCodeViewData (module.Mvid, filename, age: 1);
328319

329-
var data = new byte [buffer.length];
330-
Buffer.BlockCopy (buffer.buffer, 0, data, 0, buffer.length);
331320
directory.SizeOfData = data.Length;
332321

333322
return new ImageDebugHeader (new ImageDebugHeaderEntry (directory, data));

Mono.Cecil.Cil/Symbols.cs

+22
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
using Mono.Collections.Generic;
1818
using Mono.Cecil.Cil;
19+
using Mono.Cecil.PE;
1920

2021
namespace Mono.Cecil.Cil {
2122

@@ -939,6 +940,27 @@ public static ImageDebugHeaderEntry GetCodeViewEntry (this ImageDebugHeader head
939940
return GetEntry (header, ImageDebugType.CodeView);
940941
}
941942

943+
#if !READ_ONLY
944+
945+
public static byte[] GetCodeViewData (Guid pdb_id, string pdb_path, int age)
946+
{
947+
var buffer = new ByteBuffer ();
948+
// RSDS
949+
buffer.WriteUInt32 (0x53445352);
950+
// Module ID
951+
buffer.WriteBytes (pdb_id.ToByteArray ());
952+
// PDB Age
953+
buffer.WriteInt32 (age);
954+
// PDB Path
955+
buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (pdb_path));
956+
buffer.WriteByte (0);
957+
958+
var data = new byte[buffer.length];
959+
Buffer.BlockCopy (buffer.buffer, 0, data, 0, buffer.length);
960+
return data;
961+
}
962+
#endif
963+
942964
public static ImageDebugHeaderEntry GetDeterministicEntry (this ImageDebugHeader header)
943965
{
944966
return GetEntry (header, ImageDebugType.Deterministic);

Mono.Cecil.Windows.nuspec

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0"?>
2+
<package xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3+
<metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
4+
<id>Mono.Cecil.Windows</id>
5+
<version>0.10.0.0-beta6</version>
6+
<title>Mono.Cecil.Windows</title>
7+
<authors>Jb Evain, Microsoft</authors>
8+
<owners>Jb Evain</owners>
9+
<licenseUrl>http://opensource.org/licenses/mit-license.php</licenseUrl>
10+
<requireLicenseAcceptance>false</requireLicenseAcceptance>
11+
<projectUrl>http://github.com/jbevain/cecil/</projectUrl>
12+
<summary>Adds full Windows PDB support to Mono.Cecil</summary>
13+
<description>Cecil is a library written by Jb Evain to generate and inspect programs and libraries in the ECMA CIL format. It has full support for generics, and support some debugging symbol format. In simple English, with Cecil, you can load existing managed assemblies, browse all the contained types, modify them on the fly and save back to the disk the modified assembly.</description>
14+
<language>en-US</language>
15+
<tags>assembly assemblies module modules il cil msil bytecode reflection injection cecil mono aop</tags>
16+
<dependencies>
17+
<dependency id="Mono.Cecil" version="0.10.0.0-beta6" />
18+
<group targetFramework=".NETFramework3.5">
19+
<dependency id="Microsoft.DiaSymReader" version="1.2.0-beta1-61723-01" />
20+
<dependency id="Microsoft.DiaSymReader.Native" version="1.6.0-beta2-25219" />
21+
</group>
22+
<group targetFramework=".NETFramework4.0">
23+
<dependency id="Microsoft.DiaSymReader" version="1.2.0-beta1-61723-01" />
24+
<dependency id="Microsoft.DiaSymReader.Native" version="1.6.0-beta2-25219" />
25+
</group>
26+
<group targetFramework=".NETStandard1.3">
27+
<dependency id="Microsoft.DiaSymReader" version="1.2.0-beta1-61723-01" />
28+
<dependency id="Microsoft.DiaSymReader.Native" version="1.6.0-beta2-25219" />
29+
</group>
30+
</dependencies>
31+
</metadata>
32+
<files>
33+
<file src="bin\net_3_5_Release\*.dll" target="lib/net35" />
34+
<file src="bin\net_4_0_Release\*.dll" target="lib/net40" />
35+
<file src="bin\netstandard_Release\netstandard1.3\*.dll" target="lib/netstandard1.3" />
36+
</files>
37+
</package>

Mono.Cecil.props

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
<TargetFramework Condition="'$(IsTestProject)' == 'true'">net462</TargetFramework>
4747
<TargetFramework Condition="'$(IsTestProject)' != 'true'">netstandard1.3</TargetFramework>
4848
</PropertyGroup>
49-
<Import Project="NetStandard.props" Condition=" $(NetStandard) " />
49+
<Import Project="NetStandard.props" Condition="'$(NetStandard)' == 'true'" />
5050
<!-- Shared References -->
51-
<ItemGroup Condition=" ! $(NetStandard) ">
51+
<ItemGroup Condition="'$(NetStandard)' != 'true'">
5252
<Reference Include="System.Core" />
5353
<Reference Include="System" />
5454
</ItemGroup>

Mono.Cecil.sln

+43-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Microsoft Visual Studio Solution File, Format Version 12.00
2-
# Visual Studio 14
3-
VisualStudioVersion = 14.0.25420.1
2+
# Visual Studio 15
3+
VisualStudioVersion = 15.0.26612.0
44
MinimumVisualStudioVersion = 10.0.40219.1
55
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{74E5ECE0-06B4-401C-AEBA-E8DD53E17943}"
66
EndProject
@@ -22,6 +22,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks.Tests", "r
2222
EndProject
2323
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.Rocks", "rocks\Mono.Cecil.Rocks.csproj", "{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}"
2424
EndProject
25+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.WindowsPdb", "symbols\pdb.windows\Mono.Cecil.WindowsPdb.csproj", "{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}"
26+
EndProject
27+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil.WindowsPdb.Tests", "symbols\pdb.windows\Test\Mono.Cecil.WindowsPdb.Tests.csproj", "{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}"
28+
EndProject
2529
Global
2630
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2731
net_3_5_Debug_ReadOnly|Any CPU = net_3_5_Debug_ReadOnly|Any CPU
@@ -79,11 +83,9 @@ Global
7983
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
8084
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
8185
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
82-
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
8386
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
8487
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
8588
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
86-
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
8789
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
8890
{A47B1F49-A81A-43E8-BE6B-DD28AF2C4055}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
8991
{8559DD7F-A16F-46D0-A05A-9139FAEBA8FD}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
@@ -127,11 +129,9 @@ Global
127129
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
128130
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
129131
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
130-
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
131132
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
132133
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
133134
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
134-
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
135135
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
136136
{AC71DF9C-99FA-4A63-990A-66C8010355A6}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
137137
{63E6915C-7EA4-4D76-AB28-0D7191EEA626}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
@@ -175,11 +175,9 @@ Global
175175
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
176176
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
177177
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
178-
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
179178
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
180179
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
181180
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
182-
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
183181
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
184182
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
185183
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
@@ -199,11 +197,9 @@ Global
199197
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
200198
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.net_4_0_Release|Any CPU.Build.0 = net_4_0_Release|Any CPU
201199
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
202-
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
203200
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
204201
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
205202
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
206-
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
207203
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
208204
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
209205
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
@@ -230,6 +226,38 @@ Global
230226
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
231227
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
232228
{FBC6DD59-D09D-499C-B03C-99C1C78FF2AC}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
229+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
230+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU
231+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU
232+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU
233+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU
234+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
235+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU
236+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
237+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
238+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
239+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
240+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
241+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
242+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
243+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
244+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
245+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Debug_ReadOnly|Any CPU.ActiveCfg = net_3_5_Debug_ReadOnly|Any CPU
246+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Debug|Any CPU.ActiveCfg = net_3_5_Debug|Any CPU
247+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Release_ReadOnly|Any CPU.ActiveCfg = net_3_5_Release_ReadOnly|Any CPU
248+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_3_5_Release|Any CPU.ActiveCfg = net_3_5_Release|Any CPU
249+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Debug_ReadOnly|Any CPU.ActiveCfg = net_4_0_Debug_ReadOnly|Any CPU
250+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Debug|Any CPU.ActiveCfg = net_4_0_Debug|Any CPU
251+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Release_ReadOnly|Any CPU.ActiveCfg = net_4_0_Release_ReadOnly|Any CPU
252+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.net_4_0_Release|Any CPU.ActiveCfg = net_4_0_Release|Any CPU
253+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug_ReadOnly|Any CPU.ActiveCfg = netstandard_Debug_ReadOnly|Any CPU
254+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug_ReadOnly|Any CPU.Build.0 = netstandard_Debug_ReadOnly|Any CPU
255+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU
256+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU
257+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release_ReadOnly|Any CPU.ActiveCfg = netstandard_Release_ReadOnly|Any CPU
258+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release_ReadOnly|Any CPU.Build.0 = netstandard_Release_ReadOnly|Any CPU
259+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release|Any CPU.ActiveCfg = netstandard_Release|Any CPU
260+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397}.netstandard_Release|Any CPU.Build.0 = netstandard_Release|Any CPU
233261
EndGlobalSection
234262
GlobalSection(SolutionProperties) = preSolution
235263
HideSolutionNode = FALSE
@@ -241,5 +269,10 @@ Global
241269
{63E6915C-7EA4-4D76-AB28-0D7191EEA626} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1}
242270
{29300103-CB76-4A1D-B6FD-FFD91C1EC8AA} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
243271
{C6CFD7E1-B855-44DC-B4CE-9CD72984AF52} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
272+
{1A7F5B01-F15F-4943-8AF5-CB736C60B1BE} = {929D5B3B-E29A-40CC-93D8-0FF43A6F9FA1}
273+
{77E8A7D2-4DC4-43E1-94FF-002B33FF2397} = {74E5ECE0-06B4-401C-AEBA-E8DD53E17943}
274+
EndGlobalSection
275+
GlobalSection(ExtensibilityGlobals) = postSolution
276+
SolutionGuid = {9F99F5B5-3BEF-4AC3-8E6A-94BA9CFA9381}
244277
EndGlobalSection
245278
EndGlobal

Mono.Cecil/AssemblyInfo.cs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
[assembly: Guid ("fd225bb4-fa53-44b2-a6db-85f5e48dcb54")]
1919
#endif
2020

21+
[assembly: InternalsVisibleTo ("Mono.Cecil.WindowsPdb, PublicKey=" + Consts.PublicKey)]
2122
[assembly: InternalsVisibleTo ("Mono.Cecil.Pdb, PublicKey=" + Consts.PublicKey)]
2223
[assembly: InternalsVisibleTo ("Mono.Cecil.Mdb, PublicKey=" + Consts.PublicKey)]
2324
[assembly: InternalsVisibleTo ("Mono.Cecil.Rocks, PublicKey=" + Consts.PublicKey)]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
2+
3+
using System;
4+
using System.Reflection;
5+
6+
[assembly: AssemblyTitle ("Mono.Cecil.WindowsPdb")]
7+
8+
[assembly: CLSCompliant (false)]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
2+
3+
#if !READ_ONLY
4+
5+
using System.Collections.Generic;
6+
using System.Reflection;
7+
using Microsoft.DiaSymReader;
8+
9+
namespace Mono.Cecil.WindowsPdb {
10+
11+
class ModuleMetadata : ISymWriterMetadataProvider {
12+
13+
readonly ModuleDefinition module;
14+
15+
Dictionary<uint, TypeDefinition> types;
16+
Dictionary<uint, MethodDefinition> methods;
17+
18+
public ModuleMetadata (ModuleDefinition module)
19+
{
20+
this.module = module;
21+
}
22+
23+
bool TryGetType (uint token, out TypeDefinition type)
24+
{
25+
if (types == null)
26+
InitializeMetadata (module);
27+
28+
return types.TryGetValue (token, out type);
29+
}
30+
31+
bool TryGetMethod (uint token, out MethodDefinition method)
32+
{
33+
if (methods == null)
34+
InitializeMetadata (module);
35+
36+
return methods.TryGetValue (token, out method);
37+
}
38+
39+
void InitializeMetadata (ModuleDefinition module)
40+
{
41+
types = new Dictionary<uint, TypeDefinition> ();
42+
methods = new Dictionary<uint, MethodDefinition> ();
43+
44+
foreach (var type in module.GetTypes ()) {
45+
types.Add (type.MetadataToken.ToUInt32 (), type);
46+
InitializeMethods (type);
47+
}
48+
}
49+
50+
void InitializeMethods (TypeDefinition type)
51+
{
52+
foreach (var method in type.Methods)
53+
methods.Add (method.MetadataToken.ToUInt32 (), method);
54+
}
55+
56+
public bool TryGetTypeDefinitionInfo (int typeDefinitionToken, out string namespaceName, out string typeName, out System.Reflection.TypeAttributes attributes, out int baseTypeToken)
57+
{
58+
TypeDefinition type;
59+
if (!TryGetType ((uint)typeDefinitionToken, out type)) {
60+
namespaceName = null;
61+
typeName = null;
62+
attributes = 0;
63+
baseTypeToken = 0;
64+
return false;
65+
}
66+
67+
typeName = type.IsNested ? type.Name : type.FullName;
68+
namespaceName = type.Namespace;
69+
attributes = (System.Reflection.TypeAttributes)type.Attributes;
70+
baseTypeToken = type.BaseType.MetadataToken.ToInt32 ();
71+
return true;
72+
}
73+
74+
public bool TryGetEnclosingType (int nestedTypeToken, out int enclosingTypeToken)
75+
{
76+
TypeDefinition type;
77+
if (!TryGetType ((uint)nestedTypeToken, out type) || !type.IsNested) {
78+
enclosingTypeToken = 0;
79+
return false;
80+
}
81+
82+
enclosingTypeToken = type.DeclaringType.MetadataToken.ToInt32 ();
83+
return true;
84+
}
85+
86+
public bool TryGetMethodInfo (int methodDefinitionToken, out string methodName, out int declaringTypeToken)
87+
{
88+
MethodDefinition method;
89+
if (!TryGetMethod ((uint)methodDefinitionToken, out method)) {
90+
methodName = null;
91+
declaringTypeToken = 0;
92+
return false;
93+
}
94+
95+
declaringTypeToken = method.DeclaringType.MetadataToken.ToInt32 ();
96+
methodName = method.Name;
97+
return true;
98+
}
99+
}
100+
}
101+
102+
#endif

0 commit comments

Comments
 (0)