質問

.Net 2.0から利用できるライブラリを作成することは可能ですか?また、.Net 3.0+の消費者が必要に応じてDataContractsを活用できるようにしますか?

DataContractに関連するさまざまな属性を含むライブラリが.Net 3.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のオーバーロードを使用することで回避できます。引数。したがって、使用可能であることがわかっている属性のみを読み取ります。

他のヒント

.NET 2.0と.NET 3.0および3.5は同じCLR(2.0)を使用しているため、問題はないはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top