.Net 2.0から使用でき、.Net 3.0以降の消費者が必要に応じてDataContractsの恩恵を受けることができるライブラリを作成することは可能ですか?
さまざまなDataContract関連の属性を含むライブラリが.Net3.0ライブラリであることを除いて、これに対する技術的な障害は見当たりません。これらの属性は、ExtensionMethodAttributeと同様の方法で手動で実装できますか?
.Net 2.0から使用でき、.Net 3.0以降の消費者が必要に応じてDataContractsの恩恵を受けることができるライブラリを作成することは可能ですか?
さまざまなDataContract関連の属性を含むライブラリが.Net3.0ライブラリであることを除いて、これに対する技術的な障害は見当たりません。これらの属性は、ExtensionMethodAttributeと同様の方法で手動で実装できますか?
アセンブリに .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 (または使用している属性を含む他のアセンブリ) のコピーを配布するか、(私が思うに) System.Type 引数を取る GetCustomAttributes のオーバーロードを使用することで回避できます。使用できることがわかっている属性のみを読み取ります。
.NET2.0と.NET3.0および3.5は同じCLR(2.0)を使用しているため、問題はありません。