0

讨厌的家伙,

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

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

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

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

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

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

    伊拉斯姆 foo.dll /dll

所以现在我被留在这里无法再进一步了。我非常感谢与此问题相关的任何帮助或讨论。

PS:我想分享一个非常相似的问题,我逐行跟进,但它不起作用 https://stackoverflow.com/a/12202623/861489

4

1 回答 1

0

好吧,看来我终于破解了魔咒!我与你们分享它,以供将来任何人来到这里。

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

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

于 2017-07-25T07:31:50.423 回答