4

プロジェクトのC#フォルダーからResources.resxを開くと、次のようなものが表示されます。

<data name="picture" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>..\Resources\picture.png;System.Drawing.Bitmap, System.Drawing, 
        Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>

PublicKeyTokenとは何ですか?それにどのような値を割り当てる必要がありますか?

4

3 に答える 3

3

.NETはアセンブリを処理しています。すべてのEXEまたはDLLファイルはアセンブリと見なされます。

アセンブリを必要とする他の.NETコードによってマシン上でグローバルに認識されるように(もちろんローカルにコピーせずに)、アセンブリをグローバルアセンブリキャッシュ(別名GAC)に配置できます。

GACにアセンブリだけを配置することはできません。セキュリティ上の理由から、アセンブリをGACに配置するには、強く入力する必要があります。関連性がないため、ここではアセンブリに署名するプロセスには入りませんが、署名プロセスの一部は公開鍵を取得することです。次に、この同じキーを任意の数のアセンブリで使用できるため、アセンブリには1つのキーがありますが、1つのキーは多くの異なるアセンブリで共有される場合があります。

.NETが強く型付けされたアセンブリをロードする場合、次の3つのパラメーターを取得する必要があります。

  1. アセンブリ名。
  2. アセンブリバージョン。
  3. アセンブリ公開鍵。

これらのいずれかが欠落しているか間違っていると、.NETはアセンブリを見つけることができないというエラーをスローします。

最後の質問です。既知のアセンブリ名を指定して、その公開鍵トークンを見つける方法を教えてください。

4.0より前のすべてのシステムアセンブリは、Windows Button+Rを入力%windir%\assemblyしてから、を入力することで見つけることができますENTER。インストールされているアセンブリの完全な表が、それぞれ名前、バージョン、およびキーとともに表示されます。たとえば、ここの元の質問に投稿されたキーは、実際にSystem.Drawingアセンブリに属していることがわかります。

4.0フレームワークでの重大な変更により、アセンブリのGACの場所がに変更%windir%\Microsoft.NET\assembly\され、わかりやすいリスト形式ではなく、フォルダーとファイルとして表示されるようになりました。新しいGACの各アセンブリには、独自のフォルダーがあり、その名前からパブリックトークンを抽出できます。たとえば、System.Webには次のサブフォルダが含まれています。

v4.0_4.0.0.0__b03f5f7f11d50a3a

つまり、キーはb03f5f7f11d50a3aであり、.resxSystem.Webアセンブリを参照している場合は、これをファイルに配置する必要があります。(これはSystem.Drawingキーと同じですが、ここでは実際には関係ありません)

于 2013-02-10T14:19:49.063 に答える
0

これを参照してください

Microsoftは、厳密に名前が付けられたアセンブリの公開鍵のハッシュを使用して、「公開鍵の肥大化」の問題を解決します。これらのハッシュは公開鍵トークンと呼ばれ、厳密に名前が付けられたアセンブリの公開鍵のSHA1ハッシュの下位8バイトです。SHA1ハッシュは160ビット(20バイト)のハッシュであり、ハッシュの上位12バイトはこのアルゴリズムでは単純に破棄されます。

于 2013-02-10T12:12:13.443 に答える
0

このリファレンスのプロパティを見ると、「ローカルコピー」がデフォルトで「True」に設定されていることがわかります。

于 2016-01-14T21:25:32.600 に答える