2012-05-07 4 views
0

私はコンパクトなフレームワーク3.5で動作しているアプリケーションを持っており、4.0フレームワークを実行しているサービスにワイヤを介して情報を送信する必要があります。具体的には、例外に関する情報を渡しています。クラス名とアセンブリ名を使用して、指定された例外の新しいインスタンスを作成できるようにする必要があります。クラス名とdll名しか持たない場合は、どのようにして完全なアセンブリ参照を取得できますか?

Activator.CreateInstance()を使用してオブジェクトを作成していますが、Type.GetType()を使用して4.0フレームワークの対応する型への参照を取得する予定でした。しかし、(私は4.0アセンブリのPublicKeyTokenを知らないので)型参照(または型参照を取得するための完全修飾アセンブリ名)をクラス名とアセンブリ名から取得する方法を知ることはできません。

私は翻訳のために私のサービスに情報の一部を不正行為で保存することができますが、私はトークンやバージョン文字列をハードコーディングすることを含まないデータの完全な動的ルックアップを探しています。

私はProtoBuf-Netを使用してデータをシリアル化/シリアル化解除しています。私はちょうど型の値自体をシリアライズしていたが、これはいくつかの例外の型ではなく、他のクラスでは動作することがわかったので、クラスとアセンブリの文字列名を渡すことに頼った。フレームワークタイプ/バージョン。具体的には、System.Net.WebExceptionがType値を渡すときに、最初に例外が発生しました。

答えて

2

System.Webと書くだけで、Fusion(CLRのアセンブリローダー)があなたに合ったアセンブリを見つけることができます。
バージョンまたは公開鍵トークンは必要ありません。例えば

Type.GetType("System.Web.HttpException, System.Web") 
+0

うーん、それは私のために動作しません。私は、次のテストコード 'string typeName =" System.Net.WebException、System "で.NET 4.0フレームワークでテストアプリケーションを実行しています。 タイプfoo = Type.GetType(typeName); 'そして、変数fooにnull値が返されます。 – WiredWiz

+0

@WiredWiz: 'Type.GetType(" System.Net.WebException、System ")'はLINQPadでうまく動作します。 – SLaks

+0

ええと、まあ、私は標準の4.0コンソールアプリケーションでそれをテストしていて、何も言いたくないのですが、null値が返されます。 – WiredWiz

関連する問題