ildasm引用第三方DLL中的内部类

时间:2017-07-25 06:27:23

标签: dll reference internal strong-typing ildasm

格斗人,

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

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

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

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

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

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

      

    ilasm foo.dll / dll

  3. 所以现在我离开这里无法继续前进。我非常感谢与此事有关的任何帮助或讨论。

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

1 个答案:

答案 0 :(得分:0)

好吧,好像,我终于设法打破了这个咒语! 我和你们分享,因为将来有人来这里。

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

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