@@ -213,8 +213,6 @@ public override string ToString()
213213#if ! VSADDIN
214214 public class AssemblyReference : IAssemblyReference
215215 {
216- static readonly SHA1 sha1 = SHA1 . Create ( ) ;
217-
218216 readonly System . Reflection . Metadata . AssemblyReference entry ;
219217
220218 public MetadataReader Metadata { get ; }
@@ -263,15 +261,24 @@ public string FullName {
263261 public Version ? Version => entry . Version ;
264262 public string Culture => Metadata . GetString ( entry . Culture ) ;
265263 byte [ ] ? IAssemblyReference . PublicKeyToken => GetPublicKeyToken ( ) ;
264+ Lazy < byte [ ] ? > publicKeyToken ;
266265
267266 public byte [ ] ? GetPublicKeyToken ( )
267+ {
268+ return publicKeyToken . Value ;
269+ }
270+
271+ private byte [ ] ? ComputePublicKeyToken ( )
268272 {
269273 if ( entry . PublicKeyOrToken . IsNil )
270274 return null ;
271275 var bytes = Metadata . GetBlobBytes ( entry . PublicKeyOrToken ) ;
272276 if ( ( entry . Flags & AssemblyFlags . PublicKey ) != 0 )
273277 {
274- return sha1 . ComputeHash ( bytes ) . Skip ( 12 ) . ToArray ( ) ;
278+ using ( var hasher = SHA1 . Create ( ) )
279+ {
280+ return hasher . ComputeHash ( bytes ) . Skip ( 12 ) . ToArray ( ) ;
281+ }
275282 }
276283 return bytes ;
277284 }
@@ -321,6 +328,7 @@ public AssemblyReference(MetadataReader metadata, AssemblyReferenceHandle handle
321328 Metadata = metadata ;
322329 Handle = handle ;
323330 entry = metadata . GetAssemblyReference ( handle ) ;
331+ publicKeyToken = new ( ComputePublicKeyToken ) ;
324332 }
325333
326334 public AssemblyReference ( MetadataFile module , AssemblyReferenceHandle handle )
@@ -332,6 +340,7 @@ public AssemblyReference(MetadataFile module, AssemblyReferenceHandle handle)
332340 Metadata = module . Metadata ;
333341 Handle = handle ;
334342 entry = Metadata . GetAssemblyReference ( handle ) ;
343+ publicKeyToken = new ( ComputePublicKeyToken ) ;
335344 }
336345
337346 public override string ToString ( )
0 commit comments