アセンブリは .NET でどのように解決されますか。つまり、完全修飾名を持つアセンブリはどのように解決されるのでしょうか。公開鍵/秘密鍵のトークンと厳密な命名について混乱しています。ありがとう
編集:署名の遅延などについても読みました。人々は本当にそれを使用していますか?(遅延署名を実際に使用した人はいますか)アセンブリに署名するためのキーを生成するのは誰ですか。質問が多すぎて申し訳ありません。しかし、私はこのすべてについて混乱しています。
アセンブリは .NET でどのように解決されますか。つまり、完全修飾名を持つアセンブリはどのように解決されるのでしょうか。公開鍵/秘密鍵のトークンと厳密な命名について混乱しています。ありがとう
編集:署名の遅延などについても読みました。人々は本当にそれを使用していますか?(遅延署名を実際に使用した人はいますか)アセンブリに署名するためのキーを生成するのは誰ですか。質問が多すぎて申し訳ありません。しかし、私はこのすべてについて混乱しています。
アセンブリの完全な表示名( )を生成するために、厳密な名前付けが "公開キー トークン" と共に使用されますmscorlib, version=2.0.0.0, Culture=neutral, PublicKeyToken=b4778,.....
。これにより、同じアプリケーション ディレクトリ内に同じアセンブリの複数のバージョンを並べて配置できます。
公開キー トークン (したがって、文字列の命名手法) を使用すると、.NET ローダーは、配布後にアセンブリのコンテンツが改ざんされていないかどうかを検出することもできます。これは、"プライベート トークン" を使用してアセンブリに署名すると、"プライベート トークン" のパブリック部分を記述するアセンブリ メタデータに埋め込まれたハッシュ値がコンパイラによって生成されるためです。ローダーは、この値を使用して、アセンブリが変更されたかどうかを判断できます。
アセンブリの解決に関しては、考慮すべき基本事項がいくつかあります。
プローブ
ローダーは、基本的なディレクトリ "プローブ" 手法を使用してアセンブリを見つけようとします。MyAssembly.dll
これは、" " (たとえば) をアプリケーションのスタートアップ ディレクトリで見つけようとすることを意味し、そこにない場合は、その下のサブディレクトリで見つけようとします。プローブで " MyAssembly.dll
" が見つからない場合、AppDomain
のAssemblyResolve
イベントが発生します。
マシン/ユーザー/システム構成
、およびはmachine.config
、システムにローカルに保存された構成ファイルであり、「マシン」、「ユーザー」、または「システム」全体の設定でアセンブリ リゾルバーの動作を変更するために使用できます。user.config
system.config
パブリッシャー ポリシー<assemblyIdentity>
アプリケーションの構成ファイル (" " など) で " " XML トークンを
使用してMyApp.exe.config
、リゾルバーがアセンブリの特定のバージョンを指すようにしたり、別の場所からアセンブリを読み込んだりすることができます。
カスタム解像度
の " AssemblyResolve
" イベントを処理しAppDomain
ます。このイベントは、「従来の」方法でアセンブリを解決できなかった場合に発生します
最も複雑でないメカニズムは、「AssemblyResolve」イベントを処理することです。
要約すると、リゾルバーは現在のディレクトリまたはグローバル アセンブリ キャッシュを検索し、ポリシーを処理してから、最終的にカスタム解決を許可します。
MSDNの次の記事が役に立ちます。
http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx
アセンブリはGACを含むさまざまな場所に配置したり、実行中のアセンブリと同じ場所に配置したり、シャドウコピーしたりできるため、.NETでのアセンブリの解決はかなり複雑になる可能性があります。一般的なプロセスはFusionプロセスと呼ばれ、適切なセキュリティ対策を保証します。アセンブリをロードするときに満たされます。
アセンブリの解決には、ロードしようとしているアセンブリの場所(GAC、アプリケーションベースフォルダー、サブフォルダー、またはベースアプリケーションフォルダーから離れた別のフォルダー)に応じて、いくつかの手順が含まれる場合があります。
これは、.Netがアセンブリを検索する場所を指定する方法についての優れた記事です。 MSDNの記事
アプリケーションベースフォルダーまたはGACに保存されていないアセンブリをランタイムで解決する場合は、アセンブリが見つからないときに発生するAppDomainイベントに登録する必要があります。次に、ファイルが他の場所に存在するかどうかを確認してそのイベントに対応し、Assembly.LoadFrom(thePath)を使用してファイルを返します。
この答えにさらに追加するのは、このクラッキングリンクです。これは、強力な名前付け全体をキーで非常にうまくまとめる必要があります。強力な名前付け-キーなど。
これからの質問は、ただ聞いてください!