Зарегистрируйте dll в GAC – но затем он не отображается в окне сборки

У меня есть этот код для регистрации DLL в мой gac

Assembly asm = Assembly.LoadFrom(argument); RegistrationServices regAsm = new RegistrationServices(); bool bResult = regAsm.RegisterAssembly(asm, AssemblyRegistrationFlags.SetCodeBase); 

и это работает нормально, я получаю истинное значение для bResult, но когда я открываю окно GAC, я ожидал увидеть там DLL, но это не так. Может ли кто-нибудь объяснить мне, почему?

Когда я бросаю dll в окно GAC, я вижу его там.

Ваш код не регистрирует сборку в GAC, но, как объяснено здесь ,

Регистрирует classы в управляемой сборке, чтобы включить создание из COM.

что не то же самое.

Весьма странно, что это не обернуто платформой .NET. Необходимые декларации о слиянии легко доступны. Этот код работал хорошо:

 using System; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; static class GacUtil { public static void InstallAssembly(string path, bool forceRefresh) { IAssemblyCache iac = null; CreateAssemblyCache(out iac, 0); try { uint flags = forceRefresh ? 2u : 1u; int hr = iac.InstallAssembly(flags, path, IntPtr.Zero); if (hr < 0) Marshal.ThrowExceptionForHR(hr); } finally { Marshal.FinalReleaseComObject(iac); } } public static void UninstallAssembly(string displayName) { IAssemblyCache iac = null; CreateAssemblyCache(out iac, 0); try { uint whatHappened; int hr = iac.UninstallAssembly(0, displayName, IntPtr.Zero, out whatHappened); if (hr < 0) Marshal.ThrowExceptionForHR(hr); switch (whatHappened) { case 2: throw new InvalidOperationException("Assembly still in use"); case 5: throw new InvalidOperationException("Assembly still has install references"); case 6: throw new System.IO.FileNotFoundException(); // Not actually raised } } finally { Marshal.FinalReleaseComObject(iac); } } [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("e707dcde-d1cd-11d2-bab9-00c04f8eceae")] internal interface IAssemblyCache { [PreserveSig] int UninstallAssembly(uint flags, [MarshalAs(UnmanagedType.LPWStr)] string assemblyName, IntPtr pvReserved, out uint pulDisposition); [PreserveSig] int QueryAssemblyInfo(uint dwFlags, [MarshalAs(UnmanagedType.LPWStr)] string pszAssemblyName, IntPtr pAsmInfo); [PreserveSig] int CreateAssemblyCacheItem(/* arguments omitted */); [PreserveSig] int CreateAssemblyScavenger(out object ppAsmScavenger); [PreserveSig] int InstallAssembly(uint dwFlags, [MarshalAs(UnmanagedType.LPWStr)] string pszManifestFilePath, IntPtr pvReserved); } [DllImport("mscorwks.dll", PreserveSig = false)] // NOTE: use "clr.dll" in .NET 4+ internal static extern void CreateAssemblyCache(out IAssemblyCache ppAsmCache, int reserved); } 

Не забудьте нажать F5 в окне проводника, чтобы обновить представление, если вы добавляете и удаляете сборки с этим кодом.

Используемый метод предназначен для регистрации COM. Официального способа сделать это не существует.

У Microsoft есть база знаний о том, как использовать недокументированный API GAC

надеюсь это поможет,

  • чтение из файла app.config
  • Поиск дерева с помощью LINQ
  • Как создать функцию pause / wait с помощью Qt?
  • Как работает MVC 4 List Binding?
  • Является ли int ссылочным типом или типом значения?
  • Список стандартных файлов заголовков в C и C ++
  • Почему было сделано предложение о переключении?
  • Подключение к LDAP с C # с помощью DirectoryServices
  • Как использовать функцию rand для создания чисел в определенном диапазоне?
  • Как использовать индикатор выполнения WinForms?
  • Как получить маленькие конечные данные из большого эндиана в c # с помощью метода bitConverter.ToInt32?
  • Interesting Posts

    Что такое сценарий отладки DOS для низкоуровневого формата жесткого диска?

    Закрыть окно из ViewModel

    Как я могу получить UUID своего телефона Android в приложении?

    как игнорировать файлы в печи / ртути с использованием черепахи hg “, которые являются частью хранилища”

    Можно ли получить доступ к памяти локальной переменной за пределами ее объема?

    Понимание примера Matlab FFT

    Ошибка установки Skype; Код 1638 при попытке обновления Skype

    ?: тройное условное поведение оператора при оставлении одного выражения пустым

    Автоматически выполняемые функции при загрузке разделяемых библиотек

    Поскольку matplotlib.finance устарел, как я могу использовать новый модуль mpl_finance?

    Как установить или изменить версию Java (JDK) по умолчанию на OS X?

    FileSystemWatcher против опроса для просмотра изменений файла

    Ошибка: com.android.tools.aapt2.Aapt2Exception: ошибка AAPT2: проверить журналы для получения более подробной информации

    Как изменить тайм-аут подключения по умолчанию в Chrome?

    FTP-клиент в окнах, которые сохраняют пароль сеанса в зашифрованном тексте

    Давайте будем гением компьютера.