Подписание беззнаковой сборки

Недавнее обновление NHibernate 2.1 привело к возникновению мегаголовой боли на поверхность.

Похоже, что большинство проектов строятся по умолчанию в виде подписанных сборок. Для Например, fluentnhibernate ссылается на ключевой файл fluent.snk.

Nhibernate.search строит неподписанные из того, что я могу собрать и не буду строить если вы ссылаетесь на сгенерированный ключевой файл, вы получаете сообщение об ошибке:

Ссылка на сборку "Lucene.Net" не имеет сильного имени

Это означает, что такие проекты, как castle.activerecord, которые имеют nhibernate.search как зависимость не будет построена, поскольку вы получите ужасную ошибку, на которую ссылаются сборка nhibernate.search не имеет сильного имени:

В нескольких проектах используется caslte.activerecord, поэтому очень важно, чтобы это строит.

Кто-нибудь знает, что делать здесь, поскольку я полностью из идей?

Это полное безумие.

Ответ 1

  • Получить MSIL для предоставленной сборки В командной строке VS.NET введите следующее: c: > ildasm providedAssembly.dll/out:providedAssembly.il
  • Переименование/перемещение оригинальной сборки Я просто использую ".orig" для имени файла.
  • Создайте новую сборку с выхода MSIL и ваш файл сборки Предполагая, что у вас уже есть файл пары ключей сборки, выполните следующие действия из командной строки VS.NET: c: > ilasm providedAssembly.il/dll/key=keypair001.snk

Источник http://www.andrewconnell.com/blog/archive/2004/12/15/772.aspx

Ответ 2

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

Когда я сталкиваюсь с этой проблемой, я бросаю строку у автора проекта (или регистрирую проблему) с объяснением в моем комментарии выше, и, пока я жду исправления, я сам компилирую и подписываю его.

Ответ 3

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

Существует намного лучший способ. Во-первых, вот мои источники:

Первый - это ссылка на пакет NuGet под названием StrongNaming, который позволяет строго назвать сборки, а также заботится о неподписанных ссылках для вас! Во втором описывается, как загружать пакеты NuGet без Visual Studio, если это необходимо.

Я лично использовал Visual Studio, чтобы загрузить его с помощью самого менеджера пакетов NuGet, однако вы всегда можете перейти непосредственно к https://www.nuget.org/api/v2/package/Nivot.StrongNaming/1.0.4.2 и загрузите nivot.strongnaming.1.0.4.2.zip

В загруженном zip (или пакете, если был использован NuGet) есть папка tools). После его установки вы можете легко установить его в качестве модуля PowerShell.

Ответ 4

Подробное руководство опубликовано в http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing.

Таким образом, процедура следующая:

  • Разберите целевую двоичную систему с помощью ildasm
  • Восстановить/собрать с помощью ilasm, на этот раз с помощью клавиши