GAC - сборка находится в GAC, но «не удалось загрузить файл или сборку» - PullRequest
6 голосов
/ 03 августа 2010

У меня есть Interop dll, созданный Visual Studio для стороннего COM-объекта, который я использую в .NET dll.

Я зарегистрировал в GAC и мою dll-библиотеку, и dll Interop. Я должен использовать GAC, потому что эти библиотеки DLL используются рабочим процессом SharePoint 2010.

Когда выполнение достигает точки, где моя dll вызывает Interop dll, была выдана следующая ошибка »« Не удалось загрузить файл или сборку »…« Системе не удалось найти указанный файл »вместе с ожидаемой версией и открытым ключом .

Если я проверю средство просмотра журнала привязки сборки Fusion, в записи журнала Interop dll появится следующая ошибка:

LOG: GAC Lookup was unsuccessful.

Я вижу эту сборку в GAC, и она имеет правильную версию и маркер открытого ключа, как указано в исключении FileNotFound.

Что происходит?

Ответы [ 4 ]

4 голосов
/ 03 августа 2010

Проблема заключается в том, что, наряду с верностью Версии и Открытого ключа, Архитектура процессора взаимодействия должна соответствовать вашей вызывающей DLL. И, конечно же, Target Framework должен иметь ту же версию.

Моя dll была скомпилирована с процессором MSIL (Agnostic, AnyCPU), но по какой-то странной причине Visual Studio настояла на том, чтобы скомпилировать Interop для x386.

(Возможно, это обычно не вызывает проблемы, но мой сервер SharePoint работает на 64-разрядной системе, что могло вызвать появление симптомов).

Решение состоит в том, чтобы собрать Interop самостоятельно:

1 - Отмените регистрацию своей dll и взаимодействия в GAC.

2 - Запустите командную строку Visual Studio версии Visual Studio, которая относится к платформе .NET, на которую ориентирована ваша dll (т.е. я разрабатывал свою dll в Visual Studio 2010, нацеленную на .NET 3.5. Для этого мне нужно было запустить командную строку Visual Studio 2008)

3 - Генерация взаимодействия с использованием Tlbmp

tlbimp <full path and filename of  COM .tlb>  /out:c:\.\Interop.CoolThirdParty.dll /keyfile: <full path and filename of snk> /machine:Agnostic /Namespace:CoolThirdParty  

/ machine: Agnostic вызывает построение Interop с ориентацией на архитектуру процессора MSIL, которая аналогична моей dll.

4 - Удалите старую ссылку на Interop в вашем проекте dll

5 - Удалите старый файл Interop и замените его на тот, который вы только что создали (например, c:. \ Interop.CoolThirdParty.dll)

6 - Добавить ссылку в вашем проекте на новый Interop.

7 - перестроить

8 - Зарегистрируйте свою новую сборку dll и новый Interop в GAC

Это должно начать работать.

2 голосов
/ 28 марта 2013

Закрыть Visual studio .... удалить все папки из C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Временные файлы ASP.NET

Это должно решить вашу проблему ....

0 голосов
/ 29 августа 2014

Я получил это для строки в моем webconfig в compilation.assemblies, ссылающейся на сборку, которая была в GAC.Проблема была в том, что кто-то поместил перенаправление сборки в файл web.config, перенаправляющий из версии, которая была в GAC, на какую-то другую несуществующую версию.

0 голосов
/ 03 августа 2010

Надеюсь, ваш сторонний COM-объект также зарегистрирован на компьютере

...