第三方 DLL 中的 ildasm 参考内部 类

ildasm Reference Internal Classes in third Party DLL

你们好,

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

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

现在,我希望引用的 dll 允许我访问它的内部内容,但在我的项目中我收到错误消息“'BlaBla' 由于其保护级别而无法访问”,这清楚地表明它不会允许我从新 Dll 访问内部 class。

目前我尝试过的解决方案:

  1. 在引用的 DLL 和我文件的 InternalVisibleTo 部分的 il 文件中使用了 Ildasm,我删除了整个 PublicTokenKey。我再试一次,但没有成功。

  2. 为我的 dll 重新创建了一个与之前名称相同的强类型名称,但没有用。

    ilasm foo.dll /dll

所以我现在只能留在这里不能再走了。我非常感谢与此事相关的任何帮助或讨论。

PS: 我想分享一个非常相似的问题,我一行一行地跟着,但没有成功

OK,看来我终于破解了魔咒! 分享给大家,以后有谁来过。

过程是正确的,唯一的问题是引用的Dll Manifest中的友好声明。我使用了 Rad 工具中的 "JustDecompile" 工具并看到了问题

你看我声明为好友的Dll定义的很奇怪!我发现我无法在 IL 文件编辑器中执行此操作而不会出错。所以我使用 "JustDecompile" 为我反编译代码并制作项目。它有很多错误并且没有编译。但我不在乎。我删除了所有代码文件并添加了一个空代码文件。然后在 AssemblyInfo.cs 文件中,我找到了我正在寻找的 InternalVisibleTo 标记的声明。我更改了预期的文件并从中删除了 PublicTokenKey 并使用 1 个 cs 文件编译了项目。我只是 ildasmed 它并在清单文件中获得了它的新记录!我在我的旧文件清单中使用了这个新记录并 ilasm 它。 把它放在我的项目和 vola 中!有用! 天啊,太有趣了!