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

Поздравляю ребят,

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

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

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

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

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

  2. #P7# <блочная цитата> #P8#

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

PS: я хочу поделиться очень похожим вопросом, который я выполнял построчно, и это не сработало https://stackoverflow.com/a/12202623/861489


person Mohfath    schedule 25.07.2017    source источник


Ответы (1)


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

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

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

person Mohfath    schedule 25.07.2017