1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//! Owned Assembly table representation
//!
//! Provides the [`crate::metadata::tables::assembly::Assembly`] struct which contains fully resolved assembly metadata
//! with owned data and resolved heap references. This is the primary data structure
//! for representing assembly identity and versioning information in a usable form.
use OnceLock;
use crate;
/// Represents a .NET CIL assembly with fully resolved metadata and owned data
///
/// This structure contains the complete assembly identity information from the Assembly
/// metadata table (0x20), with all heap references resolved to owned strings and byte arrays.
/// Unlike [`crate::metadata::tables::assembly::raw::AssemblyRaw`], this provides
/// immediate access to string data without requiring heap lookups.
///
/// # Assembly Identity
///
/// An assembly's identity consists of:
/// - **Simple name**: The filename without extension (e.g., "System.Core")
/// - **Version**: Four-part version number (Major.Minor.Build.Revision)
/// - **Culture**: Localization culture (None for culture-neutral assemblies)
/// - **Public key**: Strong name public key for verification (optional)
///
/// # Reference
/// - [ECMA-335 II.22.2](https://ecma-international.org/wp-content/uploads/ECMA-335_6th_edition_june_2012.pdf) - Assembly table specification