2012-03-03 15 views
1

這是通過C#本書從傑弗裏裏希特的CLR引文:散列值可以在每個文件清單中看到?

「當你建立一個強命名程序集,程序集的 FileDef清單元數據表包括所有構成組件中的文件列表 作爲每個文件的名稱被添加到清單中,文件的內容被散列,並且這個散列 值與FileDef表中的文件名一起存儲。「

問: 你能解釋一下,如果每個文件(我的理解是引用程序+資源)進行散列,如果每個文件的哈希值存儲內出現,在那裏/我怎樣才能找到/看到這些散列值內部清單?

當我打開清單時,我無法找到它的示例程序集。我只看到下.assembly ConsoleTests {...}

回答

1

通過所有組成大會文件的大會信息,筆者指netmodule S,不是引用的程序集。

如果程序集僅包含自己的單個文件,則FileDef表將爲空。 如果您嘗試構建由多個模塊組成的程序集,您將能夠在清單中看到散列。嘗試:

(1)創建三個源文件(對於三個模塊):

// module1.cs 
namespace MultiModuleAssembly 
{ 
    public class Class1 { } 
} 

// module2.cs 
namespace MultiModuleAssembly 
{ 
    public class Class2 { } 
} 

// main.cs 
namespace MultiModuleAssembly 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Class1 c1 = new Class1(); 
      Class2 c2 = new Class2(); 
     } 
    } 
} 

(2)編譯每個文件入.netmodule

csc /t:module module1.cs 
csc /t:module module2.cs 
csc /t:module main.cs /addmodule:module1.netmodule /addmodule:module2.netmodule 

(3)登錄在主模塊用鑰匙:

al main.netmodule /keyfile:key.snk /out:main-signed.dll 

(4)在打開ildasmmain-signed.dll,和雙點擊M A N I F E S T節點:

// Somewhere in the middle of the listing 
.file main.netmodule 
    .hash = (89 84 FB F2 BB 72 AA 13 44 76 A5 49 8F 13 99 3E // .....r..Dv.I...> 
      54 30 24 84)          // T0$. 
相關問題