2013-08-02 6 views
1

참조 된 라이브러리를 사용하는 응용 프로그램이 있습니다. 해당 라이브러리는 .winmd 라이브러리를 참조합니다. 런타임시런타임에서 .winmd 참조 대신 exe/dll을 찾습니다.

.assembly extern windowsruntime FlurryWin8SDK 
{ 
    .ver 0:9:0:0 
} 

그러나, 나는 예외가 점점 오전 : 참조 된 라이브러리의 IL 보면

, 나는이 참조 누르라 수 Procmon을 사용하여, 또한

{"Could not load file or assembly 'FlurryWin8SDK' or one of its dependencies. The system cannot find the file specified.":"FlurryWin8SDK"} 

을 내가 볼이 FlurryWin8SDK.exe 및 FlurryWin8SDK.dll을 검색하지만 .winmd 확장자를 가진 파일은 검색하지 않습니다.

BEGIN : Framework bind. 
END : The provided identity format is not recognized. (Exception from HRESULT: 0x80132003) 
BEGIN : Windows Runtime Type bind. 
END : The provided identity format is not recognized. (Exception from HRESULT: 0x80132003) 
BEGIN : Immersive bind. 
END : The system cannot find the file specified. (Exception from HRESULT: 0x80070002) 

이 이상한 행동에 대한 이유가 될 수 무엇 :

또한,이 퓨전있는 LogViewer의 출력은?

+0

해결책을 찾았습니까? 내 자신의 WinMD 구성 요소와 WP 8.1 매우 비슷한 문제가 있습니다. – Soonts

답변

2

이상한 행동은 아닙니다. WinRT는 점포 사용자가 문제를 해결하기를 기대할 수없는 문제 인 DLL 지옥을 강력하게 중단합니다. 매우 어려운 요구 사항은 모든 종속성이 앱 패키지에 포함되어 있다는 것입니다. 그리고 Windows는 해당 패키지에서 DLL을 검색합니다.

이렇게하면 .winmd 파일이 약간 유용합니다. 별도로 패키지화 된 많은 개별 솔루션으로 구축 된 대형 제품에서만이 기능을 고려할 수 있습니다.

+0

언급하지 않았지만 .winmd는 패키지에 포함되어 있습니다 ... –

+0

.winmd 파일에는 코드가없고 선언 만 있습니다. 코드를 찾을 때 프로그램이 넘어집니다. –

+1

Flurry는 .winmd 파일에 코드를 넣었습니다 ... Reflector에서 실제 코드를 볼 수 있습니다. –

2

관리되는 WinRT 유형에는 때로 winmd 파일에 코드가 포함될 수 있습니다. 그러나 .NET 어셈블리에 WinRT 형식이 아닌 공용 형식이 있으면 .Dll 확장명을 가진 .Net 어셈블리에 있습니다. 구성 요소에 winmd 파일뿐만 아니라 DLL에도 코드가있을 수 있습니다.