2009-06-19 3 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에만 존재하는 클래스입니다. –