2009-11-16 5 views

答えて

7

フレームワークの異なるバージョンのアセンブリ間の種類を移動するときにBCLライブラリーは、一般的TypeForwardedTo属性を使用します。たとえば、Func<>スタイルの代理人は、3.5フレームワークのSystem.Coreから4.0フレームワークのmscorlibに移動されました。

あなたは現実の世界を見ることができますが、マニフェストのノードでILDASM、ダブルクリックでは4.0からSystem.Core.dllを開き、以下の

.class extern forwarder System.Func`1 
{ 
    .assembly extern mscorlib 
} 
.class extern forwarder System.Func`2 
{ 
    .assembly extern mscorlib 
} 
.class extern forwarder System.Func`3 
{ 
    .assembly extern mscorlib 
} 
+1

優れた例のような行のすべてを探して、このの使用しています。 WCFリゾルバだけが 'TypeForwardedToAttribute'を尊重するなら、今度は-p –

5

msdnから:

たとえば、アプリケーションがUtility.dllという名前のアセンブリ内のExampleクラスを使用しているとします。 Utility.dllの開発者はアセンブリをリファクタリングすることになり、そのプロセスでExampleクラスを別のアセンブリに移動させる可能性があります。古いバージョンのUtility.dllが、新しいバージョンのUtility.dllおよびそのコンパニオンアセンブリに置き換えられた場合、新しいバージョンのUtility.dllにExampleクラスが見つからないため、Exampleクラスを使用するアプリケーションが失敗します。

Utility.dllの開発者は、TypeForwardedToAttribute属性を使用して、Exampleクラスの要求を転送することでこれを回避できます。属性が新しいバージョンのUtility.dllに適用されている場合、Exampleクラスの要求は、クラスを含むアセンブリに転送されます。既存のアプリケーションは、再コンパイルせずに正常に機能し続けます。

0

一般に、ライブラリクラスの柔軟性/リファクタリング能力が向上するようです。私はMSDNのブログに役立つ記事を見つけました。その記事では、既存のライブラリが2つの別々のDLLに分割されていることを示しています。ライブラリを使用するアプリケーションは、タイプ転送のおかげでdllの新しいバージョンで異なるDLLにタイプが移動されたことに気にする必要がありません。

MSDN Blog Posting: Type Forwarding