ildasm 引用第三方 DLL 中的内部类
Posted
技术标签:
【中文标题】ildasm 引用第三方 DLL 中的内部类【英文标题】:ildasm Reference Internal Classes in third Party DLL 【发布时间】:2017-12-30 22:00:39 【问题描述】:小伙伴们,
一个问题困扰了我好几天,我想是时候与社区分享它了。
我需要对公司的一个旧项目进行更改。此 Dll 引用第三方 dll 并使用该 DLL 中的内部类。引用的 Dll 将此文件声明为朋友或将 InternalVisibleTo 设置为此文件名和 publicToken。
现在,我希望引用的 dll 允许我访问它的内部内容,但在我的项目中,我收到错误“'BlaBla' 由于其保护级别而无法访问”,这清楚地表明它不允许我访问内部来自新 Dll 的类。
到目前为止我尝试过的解决方案:
在引用的 DLL 和文件 InternalVisibleTo 部分的 il 文件中使用了 Ildasm,我删除了整个 PublicTokenKey。 Ilasm 再次,但没有成功。
为我的 dll 创建了一个新的强类型名称,与之前的名称相同,但它不起作用。
ilasm foo.dll /dll
所以现在我被留在这里无法继续前进。我非常感谢与此问题相关的任何帮助或讨论。
PS:我想分享一个非常相似的问题,我逐行跟进,但没有奏效 https://***.com/a/12202623/861489
【问题讨论】:
【参考方案1】:好吧,看来我终于破解了魔咒! 我与你们分享,以备将来有人来这里。
过程是正确的,唯一的问题是引用的 Dll Manifest 中的友谊声明。我使用了 Rad 工具中的“JustDecompile”工具并看到了问题
您会看到我声明为朋友的 Dll 的定义很奇怪!我发现我无法在 IL 文件编辑器中做到这一点而不会出错。所以我使用“JustDecompile”为我反编译代码并制作项目。它有很多错误并且没有编译。但我不在乎。我删除了所有代码文件并添加了一个空代码文件。然后在 AssemblyInfo.cs 文件中,我找到了我正在寻找的 InternalVisibleTo 标记的声明。我更改了我的预期文件并从中删除了 PublicTokenKey 并使用 1 个 cs 文件编译了项目。我只是 ildasmed 它并在清单文件中获得了它的新记录!我在旧文件清单中使用了这条新记录并对其进行了 ilasm 处理。 把它放在我的项目和vola中!有用! 天哪,这很有趣!
【讨论】:
以上是关于ildasm 引用第三方 DLL 中的内部类的主要内容,如果未能解决你的问题,请参考以下文章
Java内部类引用外部类中的局部变量为何必须是final问题解析