1

アプリケーションのソース コードがなくても、アプリケーションに特定の .NET クラスを別のファイルから強制的にロードさせる方法を知っている人はいますか? たとえば、mscorlib の 1 つのクラスに変更を加えて、特定のアプリケーションで何が起こるかを確認したい場合、 mscorlib のすべてのクラスに対してラッパー DLL を作成する必要はありません。これを思いついた理由の 1 つは、私は Windows のフォルダー ブラウザー ダイアログが大嫌いで、FolderBrowserDialog の代替クラスを作成できるようにしたいからです。次に、アプリケーションがそれを使用しようとするたびに、代わりに私のものを使用します。

を見つけましTypeForwardedToAttributeたが、ソース コードにアクセスする必要があります。ソースコードを持っていない既存のアプリケーションに対してこれを実行できるようにしたいと考えています。

4

3 に答える 3

1

アセンブリ リダイレクト/パブリッシャー ポリシーはこの目的のためのものですが、特にシステム全体で mscorlib に適用できる可能性はほとんどありません。アセンブリのリダイレクトを使用すると、特定のアセンブリを同じアセンブリの別のバージョンにリダイレクトできますが、ターゲット アセンブリには元のアセンブリと同じ公開キー トークンが必要です。mscorlib は (GAC で) 厳密に名前が付けられているため、変更後に再署名できる可能性は低いです。

また、FolderBrowserDialog内部で使用SHBrowseForFolderされているため、何らかの方法でリダイレクトまたは mscorlib をリダイレクトしても、管理されたアプリケーションのみを処理したままであることに注意してください。ネイティブ アプリケーションは引き続き基になるSHBrowseForFolder呼び出しを使用し、アプリケーションごとに異なるフォルダー ダイアログが表示されることになります。

さらに(コメントを読んだ後)、ユーザーはすでに「通常の」ダイアログに慣れている可能性がありますBrowse for folder。別のダイアログを提供すると、ユーザーの一部が混乱する可能性があります。それが優れたダイアログだと言っているわけではありませんが (そうではありません)、すべてのアプリケーションで標準的な動作を行う方が、優れたダイアログを備えた単一のアプリケーションよりもユーザーにとって優れています。

独自のプロジェクトではなく、新しいフォルダー ブラウザー ダイアログを作成してみませんか? そうするのはそれほど難しいことではありません。これは、開始する記事です - ダイアログを変更するテクニックを説明する他の記事へのリンクがあります (ただし、単一のアプリケーション内でのみ)。

于 2013-10-12T02:26:53.650 に答える
0

.Net ポリシー設定を使用して可能になる場合があります。これをチェックしてください (Don Box の優れたEssential .Netから抜粋)。特にリスト 2.4 と図 2.11 を見てください。唯一のことは、この手法を使用して組み込みの .Net クラスとアセンブリをオーバーライドできるかどうかわからないことです。

リスト 2.4. バージョン ポリシーの設定

バージョン ポリシーは、アプリケーションごと、コンポーネントごと、マシンごとの 3 つのレベルで指定できます。これらの各レベルは、バージョン番号を処理する機会を得て、1 つのレベルの結果がその下のレベルへの入力として機能します。これを図 2.11 に示します。アプリケーションの構成ファイルとマシンの構成ファイルの両方に特定のアセンブリのバージョン ポリシーがある場合は、アプリケーションのポリシーが最初に実行され、結果のバージョン番号がマシン全体のポリシーを介して実行され、特定に使用される実際のバージョン番号が取得されることに注意してください。アセンブリ。この例では、マシン全体の構成ファイルが Acme.HealthCare のバージョン 1.3.0.0 をバージョン 2.0.0.0 にリダイレクトした場合、バージョン 1.2.3.4 が要求されたときにアセンブリ リゾルバーはバージョン 2.0.0.0 を使用します。これは、アプリケーションのバージョン ポリシーがバージョン 1.2 をマップするためです。 .3.4 から 1.

于 2013-10-12T02:25:54.010 に答える