Как я подписываю сборку, которая уже была встроена в dll, в частности flute.dll

Причина, по которой я хочу подписать DLL, заключается в том, что я хочу добавить ее в глобальный кэш сборок. Сборка - это синтаксический анализатор css, написанный на Java и перенесенный на J #. Я использую VS2008, поэтому я не могу создавать J # -проекты. У него нет строгого имени, назначенного ему, и я понятия не имею, как это сделать теперь, когда он был построен.

У кого-нибудь есть идеи?

Ответ 1

После небольшого поиска я нашел этот пост, который объясняет один из способов сделать это.

отрывок:

В командной строке VS.NET введите следующее:

  • Создать ключевой файл: sn -k keyPair.snk
  • Получите MSIL для предоставленной сборки: ildasm providedAssembly.dll/out:providedAssembly.il
  • Переименуйте/переместите исходную сборку: ren providedAssembly.dll предоставляетсяAssembly.dll.orig
  • Создайте новую сборку с выхода MSIL и вашей сборки KeyFile: ilasm providedAssembly.il/dll/key = keyPair.snk

Ответ 2

Шаг 1: Отсоедините сборку

ildasm myTest.dll /out:myTest.il 

Шаг 2: Повторно соберите с помощью ключа с сильным именем

ilasm myTest.il /res:myTest.res /dll /key:myTest.snk /out:myTestSN.dll 

Для проверки вы можете использовать следующую команду:

sn -vf myTestSN.dll

Надеюсь, это поможет!

Ответ 3

Эта ссылка также показывает, как это сделать, в том числе, когда одна из сторонних сборок, которую вы подписываете, имеет ссылку на другую подписанную сборку без подписки:

http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing

Изменить: извините, ссылка заблокирована.

Ответ 4

Инструмент "Сильное имя" может повторно подписать существующую сборку, используя опцию -R. Однако из того, что я понимаю, сборка должна быть предварительно подписана или подписана с задержкой... не уверен, что вы можете использовать ее с неподписанной сборкой, но вы можете попробовать попробовать

Ответ 5

спасибо особенно PJ8 для отправки ответа 8 лет назад, который все еще спас меня сегодня. "Моя" сборка должна была идти в GAC, но зависела от SQLite-pcl-net, которая с версии 1.3.1 не является сильной, хотя теперь она зависит от сильного имени SQLitePCLRaw.bundle_green. Поэтому мне пришлось подписать SQLite-pcl-net, чтобы подписать мою собственную сборку другими словами. Я закончил с cadle-to-grave.bat файл, объединенный с информацией в этом посте и несколькими другими местами, которые я посетил сегодня. "Плюсы" - это 1. что этот байт работает в месте сборки, который вы хотите подписать 2. показывает хотя бы намек на то, где три инструмента могут быть расположены на dev-машине. 3. показывает все шаги в порядке. "Кон", конечно, состоит в том, что ваш пробег может варьироваться в зависимости от того, где ildasm, ilasm и sn фактически расположены на вашем конкретном ПК. Во всяком случае, ура.

REM Create a new, random key pair
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -k SQLite-net.snk
REM Store the key in the container MySQLiteKeys in the strong name Cryptographic Services Provider (CSP).
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -i SQLite-net.snk MySQLiteKeys
REM Disassemble to Intermediate Language
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\ildasm" SQLite-net.dll /out:SQLite-net.il
REM Rename original file
ren SQLite-net.dll SQLite-net.dll.orig
REM Reassemble to a strong-named version
"c:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm" SQLite-net.il /dll /key=SQLite-net.snk /out:SQLite-net.dll 
REM Verify the assembly 
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -v SQLite-net.dll
REM Deletes MySQLiteKeys from the default CSP
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -d MySQLiteKeys
REM View results 
pause