Check GAC for an assembly
Solution 1
Without even trying to get complicated, you could just shell out to gacutil
and capture the output. For example, gacutil /l Microsoft.Practices.Unity
gives me:
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31
bf3856ad364e35, processorArchitecture=MSIL
Number of items = 1
versus gacutil /l Some.Nonexistant.Assembly
:
Microsoft (R) .NET Global Assembly Cache Utility. Version 3.5.30729.1
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
Number of items = 0
This is easy to implement and parse and isn't dependent on any third-party implementations.
Solution 2
It's better to use ReflectionOnlyLoad
Method. this method loads an assembly into the reflection-only context, where it can be examined but not executed.
Solution 3
From .NET, the reflection API - Assembly.Load(...)
will throw a FileNotFoundException
if it does not find the assembly. The API requires a fully qualified assembly name, so I assume it must be in the GAC. I am using it to test for the presence of SQL Server Compact Edition:
Assembly foo = Assembly.Load("System.Data.SqlServerCe, Version=3.5.1.0, " +
"Culture=neutral, PublicKeyToken=89845dcd8080cc91");
Solution 4
You can use the Fusion COM API. Junfeng Zhang wrote a managed wrapper. It's from 2004, though, so I don't know how well it works anymore.
![Admin](/assets/logo_square_200-5d0d61d6853298bd2a4fe063103715b4daf2819fc21225efa21dfb93e61952ea.png)
Admin
Updated on July 09, 2022Comments
-
Admin almost 2 years
How to programmatically check GAC for an assembly?