ildasm Ссылка на внутренние классы в сторонних DLL
Ребята,
Проблема беспокоит меня в течение нескольких дней, и я подумал, может быть, пришло время поделиться ею с сообществом.
Мне нужно внести изменения в старый проект в корпорации. Эта Dll ссылается на стороннюю DLL и использует внутренний класс в этой DLL. Ссылочный Dll объявил этот файл своим другом или для InternalVisibleTo было задано имя файла и publicToken.
Теперь я хочу, чтобы указанная dll позволяла мне получить доступ к ее внутреннему содержимому, но в моем проекте я получаю сообщение об ошибке "BlaBla недоступен из-за уровня защиты", в котором четко говорится, что он не позволит мне получить доступ к внутреннему классу из новый Dll.
Решения, которые я пробовал до сих пор:
Использовав Ildasm в указанной DLL и в файле il в разделе InternalVisibleTo для моего файла, я удалил весь PublicTokenKey. Опять же, но безуспешно.
Сделал новое имя с сильно типизированным именем для моей dll, такое же, как у него было раньше, но это не сработало.
ilasm foo.dll / dll
Так что теперь я остался здесь, не в состоянии идти дальше. Я действительно ценю любую помощь или обсуждения, связанные с этим вопросом.
PS: я хочу поделиться очень похожим вопросом, который я следовал построчно, и он не работал /questions/7552242/dostup-k-nedavno-podpisannoj-storonnej-dll-daet-oshibku/7552254#7552254
1 ответ
Хорошо, кажется, мне наконец удалось разрушить чары! Я делюсь этим с вами, ребята, для тех, кто приехал сюда в будущем.
Процесс был корректным. Единственной проблемой было заявление о дружбе в указанном Манифесте Dll. Я использовал инструмент JustDecompile из инструментов Rad и увидел проблему
Вы видите Dll, который я объявил как друга, был определен странно! Я обнаружил, что я не могу сделать это в редакторе файлов IL без ошибок. Поэтому я использовал JustDecompile, чтобы декомпилировать код для меня и создать проект. У него было так много ошибок, и он не компилировался. Но мне было все равно. Я удалил все файлы кода и добавил пустой файл кода. Затем в файле AssemblyInfo.cs я нашел объявления тегов InternalVisibleTo, которые я искал. Я изменил свой предполагаемый файл, удалил из него PublicTokenKey и скомпилировал проект с файлом 1 cs. Я просто ввел его и получил новую запись в файле манифеста! Я использовал эту новую запись в моем старом файле манифеста и исказил ее. положить его в мой проект и вола! оно работает! Боже, это было весело!