title: Uninstall from GAC In C# code
body: <p>How do I uninstall the GAC from my C# application.</p>
  
  <p>I am not able to uninstall, the particular exe and DLL from GAC.</p>
  
  <p>Is it the proper way to uninstall the GAC in C# ?</p>
  
  <pre><code>public void RemoveAssembly(string ShortAssemblyName, string PublicToken)
  {
      AssemblyCacheEnum AssembCache = new AssemblyCacheEnum(null);
  
      string FullAssembName = null;
  
      for (; ; )
      {
          string AssembNameLoc = AssembCache.GetNextAssembly();
          if (AssembNameLoc == null)
              break;
  
          string Pt;
          string ShortName = GetAssemblyShortName(AssembNameLoc, out Pt);
  
          if (ShortAssemblyName == ShortName)
          {
  
              if (PublicToken != null)
              {
                  PublicToken = PublicToken.Trim().ToLower();
                  if (Pt == null)
                  {
                      FullAssembName = AssembNameLoc;
                      break;
                  }
  
                  Pt = Pt.ToLower().Trim();
  
                  if (PublicToken == Pt)
                  {
                      FullAssembName = AssembNameLoc;
                      break;
                  }
              }
              else
              {
                  FullAssembName = AssembNameLoc;
                  break;
              }
          }
      }
  
      string Stoken = "null";
      if (PublicToken != null)
      {
          Stoken = PublicToken;
      }
  
      if (FullAssembName == null)
          throw new Exception("Assembly=" + ShortAssemblyName + ",PublicToken=" + 
          token + " not found in GAC");
  
      AssemblyCacheUninstallDisposition UninstDisp;
  
  
      AssemblyCache.UninstallAssembly(FullAssembName, null, out UninstDisp);
  }
  
  
  public static void UninstallAssembly(String assemblyName, InstallReference reference, out AssemblyCacheUninstallDisposition disp)
  {
      AssemblyCacheUninstallDisposition dispResult = AssemblyCacheUninstallDisposition.Uninstalled;
      if (reference != null)
      {
          if (!InstallReferenceGuid.IsValidGuidScheme(reference.GuidScheme))
              throw new ArgumentException("Invalid reference guid.", "guid");
      }
  
      IAssemblyCache ac = null;
  
      int hr = Utils.CreateAssemblyCache(out ac, 0);
      if (hr &gt;= 0)
      {
          hr = ac.UninstallAssembly(0, assemblyName, reference, out dispResult);
      }
  
      if (hr &lt; 0)
      {
          Marshal.ThrowExceptionForHR(hr);
      }
  
      disp = dispResult;
  }
  </code></pre>