2010-06-16 3 views
60

Я запускаю GacUtil.exe из Visual Studio Command Prompt 2010 для регистрации DLL (CatalogPromotion.dll) в GAC. После запуска утилиты он говорит Assembly Successfully added to the cache, а работающий gacutil /l CatalogPromotionDll показывает, что GAC содержит сборку, но я не вижу сборку, когда я перехожу к сборке C: \ WINDOWS \ из проводника Windows. Почему я не вижу сборку в WINDOWS \ assembly из проводника Windows, но я вижу ее с помощью gacutil.exe?Gacutil.exe успешно добавляет сборку, но сборка не просматривается в проводнике. Зачем?


фона: Вот что я набрал в командной строке для VS Tools:

 

    C:\_Dev Projects\VS Projects\bmccormack\CatalogPromotion\CatalogPromotionDll\bin 
    \Debug>gacutil /i CatalogPromotionDll.dll 
    Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 
    Copyright (c) Microsoft Corporation. All rights reserved. 

    Assembly successfully added to the cache 

    C:\_Dev Projects\VS Projects\bmccormack\CatalogPromotion\CatalogPromotionDll\bin 
    \Debug>gacutil /l CatalogPromotionDll 
    Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 
    Copyright (c) Microsoft Corporation. All rights reserved. 

    The Global Assembly Cache contains the following assemblies: 
     CatalogPromotionDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9188a175 
    f199de4a, processorArchitecture=MSIL 

    Number of items = 1 

Однако сборка не отображается в C: \ WINDOWS \ сборка.

ответ

103

Это потому, что вы используете версию gacutil.exe .NET 4.0. Он хранит сборку в различных GAC, один в c: \ windows \ microsoft.net \ assembly. Где хранятся все сборки .NET 4.0. Для этого нет обработчика расширения оболочки, папки видны как есть. Вы можете посмотреть в проводнике Windows, вы увидите внутреннюю структуру папок GAC. У вас не должно возникнуть проблем с поиском вашей сборки, GAC не особенно сложно.

Если сборка предназначена для использования приложением, предназначенным для более ранней версии .NET, то вы должны использовать версию gacutil.exe .NET 2.0, хранящуюся в папке C: \ Program Files \ Microsoft SDK \ Windows \ v6.0A \ bin

+0

Узел предназначен для использования в VB6 приложения с COM. Я попытался использовать версию gacutil.exe версии 3.5 в '\ v7.0.A \ bin', но эта версия утилиты не может устанавливать сборки .NET 4.0. –

+1

VB6 не заботится о том, какую версию .NET вы используете. Он отлично работает с .NET 4.0. Возможно, вам захочется начать думать о том, как вы его развертываете на целевой машине. Там нет gacutil.exe, вам нужно создать проект установки. Избегайте неприятностей GAC во время отладки с помощью опции Regasm.exe/codebase. –

+0

спасибо за совет. Можете ли вы указать мне направление, в котором я могу больше узнать о regasm.exe/codebase? Я думал о проблемах, связанных с развертыванием, и вы хорошо понимаете, что gacutil.exe там недоступен. Я просто пытаюсь понять, как это должно быть сделано при использовании компонентов .NET в приложении VB6. –

2

Это связано с тем, что сборка, которую вы устанавливаете в GAC, была скомпилирована с использованием среды выполнения 4.0. 4.0 GAC-сборки хранятся в другом месте c: \ windows \ microsoft.net \ assembly.

Принимаемый ответ неверен. Использование .NET 4.0 gacutil для установки сборки, скомпилированной с таргетингом на 3.5 или более раннюю рабочую среду, работает очень хорошо и поместит сборку в каталог, который ожидал OP, c: \ windows \ assembly.

1

Путь -> C: \ Windows \ Microsoft.NET \ сборка \ GAC_MSIL, где все узлы сохраняются для .net версии 4.0