Проверьте GAC для сборки - PullRequest
       7

Проверьте GAC для сборки

24 голосов
/ 19 декабря 2009

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

Ответы [ 5 ]

20 голосов
/ 19 декабря 2009

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

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

7 голосов
/ 29 апреля 2010

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

6 голосов
/ 31 декабря 2009

Из .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");
2 голосов
/ 19 декабря 2009

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

0 голосов
/ 19 декабря 2009

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

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

...