ildasm Ссылка на внутренние классы в сторонних DLL

Ребята,

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

Мне нужно внести изменения в старый проект в корпорации. Эта Dll ссылается на стороннюю DLL и использует внутренний класс в этой DLL. Ссылочный Dll объявил этот файл своим другом или для InternalVisibleTo было задано имя файла и publicToken.

Теперь я хочу, чтобы указанная dll позволяла мне получить доступ к ее внутреннему содержимому, но в моем проекте я получаю сообщение об ошибке "BlaBla недоступен из-за уровня защиты", в котором четко говорится, что он не позволит мне получить доступ к внутреннему классу из новый Dll.

Решения, которые я пробовал до сих пор:

  1. Использовав Ildasm в указанной DLL и в файле il в разделе InternalVisibleTo для моего файла, я удалил весь PublicTokenKey. Опять же, но безуспешно.

  2. Сделал новое имя с сильно типизированным именем для моей dll, такое же, как у него было раньше, но это не сработало.

    ilasm foo.dll / dll

Так что теперь я остался здесь, не в состоянии идти дальше. Я действительно ценю любую помощь или обсуждения, связанные с этим вопросом.

PS: я хочу поделиться очень похожим вопросом, который я следовал построчно, и он не работал /questions/7552242/dostup-k-nedavno-podpisannoj-storonnej-dll-daet-oshibku/7552254#7552254

1 ответ

Решение

Хорошо, кажется, мне наконец удалось разрушить чары! Я делюсь этим с вами, ребята, для тех, кто приехал сюда в будущем.

Процесс был корректным. Единственной проблемой было заявление о дружбе в указанном Манифесте Dll. Я использовал инструмент JustDecompile из инструментов Rad и увидел проблему JustDebug Screen

Вы видите Dll, который я объявил как друга, был определен странно! Я обнаружил, что я не могу сделать это в редакторе файлов IL без ошибок. Поэтому я использовал JustDecompile, чтобы декомпилировать код для меня и создать проект. У него было так много ошибок, и он не компилировался. Но мне было все равно. Я удалил все файлы кода и добавил пустой файл кода. Затем в файле AssemblyInfo.cs я нашел объявления тегов InternalVisibleTo, которые я искал. Я изменил свой предполагаемый файл, удалил из него PublicTokenKey и скомпилировал проект с файлом 1 cs. Я просто ввел его и получил новую запись в файле манифеста! Я использовал эту новую запись в моем старом файле манифеста и исказил ее. положить его в мой проект и вола! оно работает! Боже, это было весело!

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