Проверьте GAC на блок

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

25
задан casperOne 30 May 2011 в 15:20
поделиться

5 ответов

Даже не пытаясь усложнить задачу, вы можете просто выполнить оболочку 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

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

22
ответ дан 28 November 2019 в 21:25
поделиться

Вы можете использовать Fusion COM API. Цзюньфэн Чжан написал управляемую оболочку . Однако это с 2004 года, так что я не знаю, насколько хорошо он работает.

2
ответ дан 28 November 2019 в 21:25
поделиться

Хотите проверить GAC на предмет сборки или просто узнать, существует ли эта сборка на машине?

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

0
ответ дан 28 November 2019 в 21:25
поделиться

Из .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");
6
ответ дан 28 November 2019 в 21:25
поделиться

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

7
ответ дан 28 November 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: