.net 拆解和重新组装的DLL赢得';不能解决相互参照的问题

.net 拆解和重新组装的DLL赢得';不能解决相互参照的问题,.net,dll,il,ildasm,ilasm,.net,Dll,Il,Ildasm,Ilasm,我正试图通过以下过程签署一组DLL: ildasm原始DLL到IL ilasm(和强命名)将IL返回到DLL 通过Visual Studio对象浏览器查看的每个DLL都是正确的,但如果重建的DLL引用了另一个重建的DLL中的对象(例如扩展其中定义的对象),则无法解析引用。对系统程序集的引用已正确解析 有人能告诉我为什么吗 我正在使用x86架构的.Net SDK v2。基于有用的Marvin Smit注释,我尝试编辑由ildasm.exe生成的.il文件,并找到了解决方案 在文本编辑器中打开.

我正试图通过以下过程签署一组DLL:

  • ildasm
    原始DLL到IL
  • ilasm
    (和强命名)将IL返回到DLL
通过Visual Studio对象浏览器查看的每个DLL都是正确的,但如果重建的DLL引用了另一个重建的DLL中的对象(例如扩展其中定义的对象),则无法解析引用。对系统程序集的引用已正确解析

有人能告诉我为什么吗


我正在使用x86架构的.Net SDK v2。

基于有用的Marvin Smit注释,我尝试编辑由
ildasm.exe
生成的
.il
文件,并找到了解决方案

在文本编辑器中打开
.il
文件,文件的第一行显示对外部程序集的引用:

.assembly extern MY_EXT_ASSEMBLY
{
    .ver 10:0:1:0
}
我将每次出现的这些引用都更改为:

.assembly extern MY_EXT_ASSEMBLY
{
    .publickeytoken = (4B DC CA FF 2F A8 6D EE )
    .ver 10:0:1:0
}
其中,
.publickeytoken
属性的值通过以下命令(表单SDK)找到:

这将产生如下结果:

Public key token is 4bdccaff2fa86dee.

我重建了我的VS解决方案并编译了所有内容。

这可能是由于“FQN”引用。由于FQN已更改(它现在有PublicKeyToken=null以外的内容),因此它被视为另一个库,任何指向PublicKeyToken为null的库的内容都将无法找到新库。确定。我想你是对的,马文;这很好地解释了我的情况,谢谢。但现在我如何更正新签名程序集中对另一个新签名程序集中的引用。我可以吗?对不起,我不能早点回复。(站在类atm前面)但我看到您找到了修改程序集信息头中引用的方法:)。
Public key token is 4bdccaff2fa86dee.