2009-06-19 7 views
1

.Net 2.0から使用できるライブラリを作成することは可能ですか?また、.NET 3.0以降のコンシューマは、必要に応じてDataContractsのメリットを得ることができますか?.Net 2.0ライブラリでのDataContractsのサポート

異なるDataContract関連属性を含むライブラリ以外に、これには技術的な障害はありません.Net 3.0ライブラリです。これらの属性は、ExtensionMethodAttributeと同様に手動で実装できますか?

答えて

1

.NET 3.0の属性をアセンブリに追加し、.NET 2.0のみのマシンでこれを実行すると、実行時に使用できないアセンブリのコードに属性が含まれます。

これは、.NET 2.0アプリケーションが実際に属性を読み取ろうとしない限り、ほとんどの場合うまく動作します。 .NET 2.0でマシン上で実行した場合、それはSystem.ServiceModel.dllをロードに失敗しますので、たとえば、次のコードは、にFileNotFoundExceptionがスローされます。

[ServiceContract] // Attribute from System.ServiceModel.dll 
class MyClass 
{ 
    ... 
} 
... 
    // this will throw a FileNotFoundException if System.ServiceModel.dll is not available 
    object[] attributes = typeof(MyClass).GetCustomAttributes(false); 

をので、あなたが消費することになるか分からない場合は、あなたのあなたがそれらを壊さないことを100%保証することはできません。

上記を回避するには、System.ServiceModel.dll(または使用している属性を含む他のアセンブリ)のコピーをアプリケーションに添付するか、システムを使用するGetCustomAttributesのオーバーロードを使用します。型引数は、利用可能であることがわかっている属性のみを読み込むようにします。

0

.NET 2.0と.NET 3.0と3.5は同じCLR(2.0)を使用しているので、問題はありません。

+0

.Net 3.0がインストールされていないコンピュータで実行されている.Net 2.0クライアントが属性を読み取ろうとするとどうなりますか?私はそのようなクライアントを現在持っていないので、私はこれをテストすることはできません。 –

+0

属性は基本クラスから継承するか、.NET 3.0のみに存在するインターフェイスを実装しますか?あなたが大丈夫になるはずです。 –

+0

DataContractAttributeなどは.Net 3.0にのみ存在するクラスです。 –

関連する問題