2017-07-25 125 views
0

Grreting家伙,反汇编参考内部类第三方DLL

一个问题困扰了我好几天,我想可能是它的时候,我与社区共享。

我需要对公司的旧项目进行更改。此Dll引用第三方DLL并在该DLL中使用内部类。引用的Dll将此文件声明为朋友,或将InternalVisibleTo设置为此文件名和publicToken。

现在,我希望引用的dll允许我访问它的内部内容,但在我的项目中,我得到错误“'BlaBla'由于其保护级别而无法访问”,它明确指出它不会允许我访问来自新的Dll的内部类。

解决方案到目前为止,我曾尝试:

  1. 对所引用的DLL,并在我的文件InternalVisibleTo部分的IL文件使用ILDASM,我取出全部PublicTokenKey。 Ilasm再次,但没有成功。

  2. 为我的dll创建了一个新的强类型名称,与之前的名称相同,但它不起作用。

    ILASM foo.dll/DLL

所以,现在我在这里留下无法再往前走。我非常感谢与此事有关的任何帮助或讨论。

PS:我想分享非常类似的一个问题,我跟着一行一行地没有工作 https://stackoverflow.com/a/12202623/861489

回答

0

OK,看来我终于设法打破魔咒! 我与大家分享,以便将来有人来到这里。

该过程是正确的,唯一的问题是引用的Dll Manifest中的友谊声明。我使用Rad工具的“JustDecompile”工具,看到问题 JustDebug Screen

你看到我声明为朋友的Dll被明确定义了!我发现在IL文件编辑器中没有任何方法可以做到这一点,而不会出错。所以我使用“JustDecompile”为我编译代码并制作项目。它有这么多的错误,并没有编译。但我不在乎。我删除了所有的代码文件并添加了一个空的代码文件。然后在AssemblyInfo.cs文件中,我找到了我正在寻找的InternalVisibleTo标签的声明。我改变了我的预期文件并从中删除了PublicTokenKey,并用1个cs文件编译了这个项目。我只是想它,并在清单文件中获得了新的记录!我在旧文件清单中使用了这个新记录,并使用了它。 把它放在我的项目和挥发!有用! 上帝很有趣!