Подтвердить что ты не робот

Проверить GAC на сборку

Как программно проверить GAC для сборки?

4b9b3361

Ответ 1

Не пытаясь усложниться, вы можете просто выложить на gacutil и захватить вывод. Например, gacutil /l Microsoft.Practices.Unity дает мне:

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

по сравнению с 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

Это легко реализовать и проанализировать и не зависит от сторонних реализаций.

Ответ 2

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

Ответ 3

Из .NET API отражения - Assembly.Load(...) выкинет FileNotFoundException, если он не найдет сборку. API требует полного имени сборки, поэтому я предполагаю, что он должен находиться в GAC. Я использую его для проверки наличия SQL Server Compact Edition:

Assembly foo = Assembly.Load("System.Data.SqlServerCe, Version=3.5.1.0, " +
    "Culture=neutral, PublicKeyToken=89845dcd8080cc91");

Ответ 4

Вы можете использовать API-интерфейс Fusion COM. Junfeng Zhang написал управляемый обертку. Это с 2004 года, поэтому я не знаю, как хорошо это работает.

Ответ 5

Вы хотите исследовать GAC для сборки или просто хотите знать, что сборка существует на машине?

Если вам не нравится, что сборка на самом деле находится в GAC, но просто загружается на машине (из приложенияdomain), вы можете просто использовать LoadAssembly с именем сборок (сильным, общим, полным и т.д.). Если сборка может быть загружена Fusion, она будет, и тогда вы узнаете, что она существует.