Разобранные и повторно собранные DLL не разрешат взаимные ссылки

Я пытаюсь подписать набор DLL через этот процесс:

  • ildasm оригинальная DLL для IL
  • ilasm (и строгое именование) IL обратно в DLL

Каждая из DLL, видимая через обозреватель объектов Visual Studio, является правильной, но если перестроенная DLL ссылается на объект в другой перестроенной DLL (например, расширяет определенный в ней объект), то ссылка не может быть разрешена. Ссылки на системные сборки правильно разрешены.

Может кто-нибудь сказать мне, почему?

Я использую.Net SDK v2 с архитектурой x86.

1 ответ

Решение

Основываясь на полезном комментарии Марвина Смита, я попытался отредактировать .il файлы, созданные ildasm.exe и нашел решение.

открытие .il файлы в текстовом редакторе, первые строки файла показывают ссылки на внешние сборки:

.assembly extern MY_EXT_ASSEMBLY
{
    .ver 10:0:1:0
}

Я изменил каждый случай этих ссылок на это:

.assembly extern MY_EXT_ASSEMBLY
{
    .publickeytoken = (4B DC CA FF 2F A8 6D EE )
    .ver 10:0:1:0
}

Где значение .publickeytoken свойство найдено с помощью следующей команды (форма SDK):

sn -T MY_EXT_ASSEMBLY.dll

Это должно дать результат следующим образом:

Public key token is 4bdccaff2fa86dee.

Я перестроил свое решение VS и все скомпилировал.

Другие вопросы по тегам