2012-03-03 5 views
1

これは、C#の本を介したジェフリー・リヒターのCLRからの引用です:。マニフェストでファイルごとにハッシュ値が表示される場所はどこですか?

「あなたは厳密な名前のアセンブリをビルドすると、アセンブリの FILEDEFマニフェストメタデータテーブルは、アセンブリを構成するすべてのファイルのリストが含まれて として、各ファイルの名前がマニフェストに追加され、ファイルの内容がハッシュされ、このハッシュ の値がファイル名と共にFileDefテーブルに格納されます。

質問:各ファイル(私の理解は、アセンブリ+リソースを参照されている)場合 あなたは説明できますが、ハッシュ化され、ファイルごとにハッシュ値がどのように私は見つけることができます/ MANIFEST内に格納されている場合/これらのハッシュ値を参照してください内部のマニフェスト?

私がマニフェストを開くと、私はサンプルアセンブリのためにそれを見つけることができません。私は.assembly ConsoleTests {...} アセンブリを構成するファイルのすべてによって

答えて

1

の下にアセンブリ情報を参照して、著者はnetmoduleのではなく、参照されるアセンブリを意味します。

アセンブリが1つのファイルのみで構成されている場合、FileDefテーブルは空になります。 複数のモジュールで構成されるアセンブリを作成しようとすると、マニフェストにハッシュが表示されます。これを試してみてください:

(1)(3つのモジュール用)3つのソースファイルを作成します。

// 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$. 
関連する問題