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

Сильное именование сторонней сборки - Не удалось загрузить файл или сборку

Я пишу расширение Visual Studio 2012 для внутреннего использования, которое требует, чтобы все сборки имели сильное имя. Я зависим от RestSharp (и нескольких других dll), и поскольку он не сильно назван, я добавляю к нему сильное имя, следуя this. Все работает в соответствии с результатами процесса, и даже визуальная студия утверждает, что она сильно названа, если я смотрю на свойства RestSharp.dll в ссылках проекта. Однако, когда я использую мое расширение, я получаю исключение FileLoadException:

Could not load file or assembly 'RestSharp, Version=104.1.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)

Любые мысли о том, как разрешить это или обойти его?

4b9b3361

Ответ 1

Я написал пакет уровня решения NuGet, чтобы помочь с сильными именами сторонних сборок с вашим собственным ключом.

Это предназначено для подписания содержимого пакетов NuGet, которые используя неподписанные сборки, чтобы иметь возможность ссылаться на эти пакеты, в которых сильно используется проект потребления. Доступ к исходный исходный код не требуется, и вы можете подписать любую сборку с вашим собственным сильным ключом для именования. Вы также можете задержать знак, если хотите.

https://nuget.org/packages/Nivot.StrongNaming

Подробнее об этом читайте в моем блоге:

http://www.nivot.org/blog/post/2013/04/30/Signing-unsigned-assemblies-in-NuGet-packages

Ответ 2

Я попытался использовать RestSharp из VSPackage, и он работает. Мои шаги для добавления RestSharp:

  • Добавьте RestSharp от NuGet в проект, где я его буду использовать. Для этого щелкните правой кнопкой мыши проект в обозревателе решений и выберите "Управление пакетами NuGet...", найдите RestSharp и нажмите кнопку "Установить".

  • Напишите тестовый код в этом проекте:

    
    var test = new RestSharp.RestClient("http://test.com");
    Logger.Log(Category.Info, "Test {0}", test.BaseUrl);
    
  • Добавьте RestSharp от NuGet в проект установщика. Аналогично параграфу 1. Я использую пакет развертывания VSIX. Для установки необходимой сборки просто нужно добавить ссылку на сборку в пакете развертывания VSIX. Это делает команду "Управление пакетами NuGet...". Когда вы создаете VSPackage VS Wizard, основным проектом VSPackage является пакет развертывания VSIX.

    Если вы используете другой способ установки расширения VS (например, установщик MSI), вам нужно явно добавить RestSharp.dll в наш установочный пакет.

В результате я получил строку "Test http://test.com" в журнале.

Скорее всего, в вашем случае этот RestSharp.dll не был установлен, и поэтому VS не находит RestSharp.dll при загрузке вашего модуля. Или полное имя установленной сборки RestSharp отличается от полной сборки имен в ссылках проекта. Чтобы увидеть это, проверьте, находится ли файл RestSharp.dll в папке вашего расширения (для пакета VSPackage по умолчанию "% LOCALAPPDATA%\MICROSOFT\VISUALSTUDIO\11.0EXP\EXTENSIONS\{YourCompanyName}\{YourProductName}\{YourProductVersion} \" ), Вы можете увидеть абсолютный путь к вашему расширению в окне "Модули", если вы используете расширение под отладчиком.

Изменить: Я только что заметил, что сборка RestSharp из NuGet не имеет сильного имени. Таким образом, каталог установленного расширения и ссылки проектов должен содержать ту же самую сборку с сильным именем, и все будет нормально работать.

Ответ 3

Несколько вещей, которые вы можете проверить:

Кажется, что вы refrence проекта по-прежнему относятся к unsigned dll.\RestSharp.dll. Вы должны скомпилировать проект против подписанной. \Signed\RestSharp.dll dll. Удалите текущие refrences и добавьте снова.

Также проверьте DLL в каталоге bin вашего проекта. Возможно, старый RestSharp.dll все еще существует. Удалите его и проверьте все каталоги сборки.

Вы также можете проверить, находится ли файл restsharp.dll в вашем GAC. Если это так, удалите dll из вашего gac.