Silverlight 어셈블리는 "일반".NET 어셈블리와 이진 호환되지 않습니다. 동일한 컴파일러가 두 유형의 어셈블리를 만드는 데 사용된다는 사실을 고려하면 어떻게 될 수 있습니까? (mscorlib.dll이 Silverlight 용으로 참조되지 않더라도)?Silverlight 어셈블리가 "일반".NET 어셈블리와 이진 호환되지 않는 이유
답변
맞아, 좋은 질문입니다. 이 영역에는 많은 오해가 있으며 사실과 허구를 구분하는 것이 중요합니다.
픽션 : Silverlight 어셈블리는 magic microsoft gnomes로 컴파일되며 .Net 데스크톱 CLR에서는 호환되지 않습니다.
사실 : CLR에는 "Fusion"이라는 아름답게 연결된 시스템이 있습니다.
각 어셈블리에는 DLL/EXE의 일부로 포함 된 어셈블리 매니페스트가 있습니다.
어셈블리 매니페스트에는 많은 수의 임베디드 리소스, 유형 시스템 정보 등이 들어 있으며이 어셈블리에는 다른 어셈블리가 필요합니다.
Fusion은 어셈블리 매니페스트 종속성을 확인하고 해당하는 실제 파일을 찾는 역할을하는 CLR의 일부입니다.
데스크톱에서 Silverlight 어셈블리 용 Fusion .Net CLR - 작동합니다. (모든 종속성이 있다고 가정)
데스크톱 어셈블리 용 Silverlight CLR에서의 퓨전 - 작동하지 않습니다.
주로 .Net BCL (Base Class Library) DLL이 존재하지 않기 때문입니다. 언급했듯이 다른 mscorlib.dll, agcorlib.dll, System.dll, System.Windows.dll 등입니다.
이러한 DLL이 서로 다른 이유는 주로 보안입니다. 정상적인 BCL은 포인터, 플랫폼 특정 p/호출, 파일, 레지스트리 등으로 모든 종류의 불쾌한 것을 만들어냅니다. 브라우저 만 실행하면됩니다.
그래서, 합산 :
실버 조립품에은 ->
을 작동하지 않습니다 실버 CLR ==에 실행하면 당신이 원하는 경우 -> 바탕 화면 CLR ==에들이받은은
데스크톱 어셈블리를 작동 데스크탑 CLR에서 실행되는 Silverlight 어셈블리의 실제 예입니다. 1 년 전의 기사를 확인하십시오. @SILVERLIGHT DLLS ON THE DESKTOP CLR
엔젤과 완전히 동의하지만 두 플랫폼 모두에서 작동하는 재사용 가능한 코드를 코딩 할 수있는 창조적 인 방법이 있습니다. –
@Boris : 예. 올바른 방법은 VS에서 링크 된 소스 파일을 사용하는 것입니다. 따라서 동일한 소스 코드에서 두 개의 어셈블리를 생성합니다. – AnthonyWJones
@ Justin : "그래, 그럼, 좋은 질문", 당신에게서 upvote을 위해 충분히 좋지 않니? ;) – AnthonyWJones
일리노이 코드는 동일합니다. 그러나 핵심 라이브러리가 다르므로 라이브러리가 Silverlight에없는 외부 라이브러리를 참조하므로 Silverlight에서 .NET 용으로 컴파일 된 라이브러리에서 가장 간단한 작업조차도 작동하지 않습니다.
이것은 예를 들어 Silverlight System.Object에서 다를 수 있으며 .NET 유형이 Silverlight에서 참조되는 경우 예측할 수없는 동작을 의미 할 수 있습니다. 그러나 Silverlight 어셈블리에서 .NET 어셈블리를 참조 할 수 없다는 제한은 IDE에 넣고 csc를 호출합니다.명령 줄에서 exe는 여전히이 경우 컴파일됩니까? – Konstantin
아마 올바른 방법은 아마도 모든 .NET 어셈블리가 mscorlib.dll을 참조한다는 것입니다 (적어도 모든 유형은 System.Object에서 상속되기 때문에). 그러나 Silverlight에서는 mscorlib.dll을 사용할 수 없습니다. 내가 맞습니까? – Konstantin
SL에서 사용하는 mscorlib의 버전은 전체 .NET에서 사용되는 버전과 다릅니다. 참조 제한이 실제로 IDE에 의해 부과 된 것이 맞습니다. – AnthonyWJones
Silverlight는 mscorlib.dll의 경량 버전을 사용하기 때문에 호환되지 않습니다. 그러나 Silverlight에서 "일반".NET 용 코드를 재사용 할 수 있습니다.
Microsoft에서 mscorlib.dll hugh의 경량 버전을 사용하도록 설정하지 않은 경우 어떻게해야합니까? 무슨 일이 일어 났을까요? – abmv
Silverlight에서 "일반"라이브러리 집합을 사용하는 경우 Silverlight 기반 웹 사이트를 사용하려면 전체 묶음 .NET Framework를 설치해야합니다. –
- 1. "호환되지 않는 포인터 ..."자기
- 2. 호환되지 않는 서명 ThreadPool.QueueUserWorkitem
- 3. 호환되지 않는 유형
- 4. 브라우저 호환되지 않는
- 5. 호환되지 않는 형식
- 6. 넷빈즈 호환되지 않는 유형
- 7. 호환되지 않는 Mootools 스크립트
- 8. 문자열의 호환되지 않는 유형
- 9. 왜 버전 호환성을 이진 호환성과 호환되지 않는 것으로 설정해야합니까? 그런 다음 다시 이진 호환성으로 설정해야만 작동합니까?
- 10. 다소 호환되지 않는 BinaryFormatter 데이터를 deserialize하는 방법은 무엇입니까?
- 11. MEF 사용이 CLS와 호환되지 않는 이유는 무엇입니까?
- 12. inode_operations, warning : 호환되지 않는 포인터 유형에서 초기화
- 13. Android : 화웨이와 호환되지 않는 앱인가요?
- 14. NSDate와 호환되지 않는 포인터 유형
- 15. 이상한 호환되지 않는 포인터 할당
- 16. 호환되지 않는 Objective C 유형
- 17. 는 "initializtion에서 호환되지 않는 유형은"
- 18. 갤러리 2와 호환되지 않는 플러그인
- 19. OBJC : 초기화에서 호환되지 않는 유형
- 20. NSDateFormatter 호환되지 않는 형식 오류
- 21. 호환되지 않는 포인터 유형 ?? 이상한
- 22. CGFloat 초기화에서 호환되지 않는 유형
- 23. memcached와 호환되지 않는 문자 인코딩
- 24. Silverlight 어셈블리에 정의 된 형식의 이진 직렬화
- 25. 어셈블리가 빌드 된 Silverlight 버전 확인
- 26. Delphi Delete TNode, 호환되지 않는 유형 TNodePtr
- 27. System.Web.Mail이 작동하지 않는 이유 System.Net.Mail이 작동하지 않는 이유
- 28. Asp.NET MVC로 이동해야하는 이유 - 이동하지 않는 이유
- 29. 예외가 잡히지 않는 이유
- 30. DataStateBehavior가 작동하지 않는 이유
'바이너리 호환'이란 무엇입니까? –
"Not binary compatible"구문은 일반적으로 Silverlight 어셈블리에서 "일반"어셈블리를 참조 할 수 없다는 사실을 설명하는 데 사용되며 그 반대의 경우도 마찬가지입니다. – Konstantin