Search code examples
.netgac.net-assembly

GAC seems to contain two assemblies with identical name, version and public key token


I'm currently staring into this page that claims to list the contents of GAC on a typical Azure VM. Note that the following assemblies and many others are listed twice.

AuditPolicyGPManagedStubs.Interop, Version=6.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 TWICE
CustomMarshalers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a TWICE
CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a TWICE
ISymWrapper, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a TWICE
ISymWrapper, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a TWICE
Microsoft.GroupPolicy.AdmTmplEditor, Version=6.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 TWICE

For these assemblies there seems to be two distinct assemblies that have the same triple "name+version+token".

How is that possible? Is that likely a bug in the web page or is it likely okay? How will the software depending on those assemblies choose the one it wants?


Solution

  • Its due to the processor architecture (x86 or x64 most likely). The page does not list the processor architecture associated with each assembly, but that is also a factor for the GAC.

    You can have assemblies associated with a specific processor architecture or platform independent. If you check the contents of your local GAC at C:\Windows\assembly the custom treatment of that folder by explorer will allow you to see the list of assemblies and the associated processor architecture.