public static IEnumerable <InstallReference> GetInstallReferences(AssemblyName assemblyName) { IAssemblyName fusionAssemblyName = null; ComCheck(FusionApi.CreateAssemblyNameObject(out fusionAssemblyName, assemblyName.GetFullyQualifiedName(), CreateAssemblyNameObjectFlags.ParseDisplayName, IntPtr.Zero)); IInstallReferenceEnum installReferenceEnum = null; ComCheck(FusionApi.CreateInstallReferenceEnum(out installReferenceEnum, fusionAssemblyName, 0, IntPtr.Zero)); IInstallReferenceItem item = null; do { int hResult = installReferenceEnum.GetNextInstallReferenceItem(out item, 0, IntPtr.Zero); if ((uint)hResult == 0x80070103) // ERROR_NO_MORE_ITEMS { yield break; } ComCheck(hResult); IntPtr refData; ComCheck(item.GetReference(out refData, 0, IntPtr.Zero)); FusionInstallReference fusionReference = new FusionInstallReference(); Marshal.PtrToStructure(refData, fusionReference); var reference = new InstallReference(InstallReferenceGuid.ToType(fusionReference.GuidScheme), fusionReference.Identifier, fusionReference.NonCanonicalData); yield return(reference); } while (true); }
private static IAssemblyCache GetAssemblyCache() { IAssemblyCache assemblyCache = null; ComCheck(FusionApi.CreateAssemblyCache(out assemblyCache, 0)); return(assemblyCache); }
public static IEnumerable <AssemblyName> GetAssemblies() { IAssemblyEnum assemblyEnum = null; ComCheck(FusionApi.CreateAssemblyEnum(out assemblyEnum, IntPtr.Zero, null, AssemblyCacheFlags.Gac, IntPtr.Zero)); IAssemblyName fusionAssemblyName = null; do { ComCheck(assemblyEnum.GetNextAssembly(IntPtr.Zero, out fusionAssemblyName, 0)); if (fusionAssemblyName != null) { yield return(new AssemblyName(GlobalAssemblyCache.GetDisplayName(fusionAssemblyName))); } } while (fusionAssemblyName != null); }
public static String GetAssemblyCacheClr4Path() { int bufferSize = 512; StringBuilder buffer = new StringBuilder(bufferSize); int hResult = FusionApi.GetCachePath(AssemblyCacheFlags.RootEx, buffer, ref bufferSize); if ((uint)hResult == 0x8007007A) // ERROR_INSUFFICIENT_BUFFER { buffer = new StringBuilder(bufferSize); ComCheck(FusionApi.GetCachePath(AssemblyCacheFlags.RootEx, buffer, ref bufferSize)); } else { ComCheck(hResult); } return(buffer.ToString()); }