I have an app that uses a referenced library. That library in turn references a .winmd library.
Looking at the referenced library's IL, i can seee this reference:
.assembly extern windowsruntime FlurryWin8SDK
{
.ver 0:9:0:0
}
At runtime however, i am getting an exception:
{"Could not load file or assembly 'FlurryWin8SDK' or one of its dependencies. The system cannot find the file specified.":"FlurryWin8SDK"}
Also, by using Procmon i see that there are attempts searching for FlurryWin8SDK.exe and FlurryWin8SDK.dll, but not for a file with .winmd extension.
Also, this is the output from Fusion logviewer:
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)
What could be the reason for this odd behaviour ?
It is not odd behavior. WinRT put a hard stop to DLL Hell, the kind of problem you cannot expect a store user to troubleshoot. A very hard requirement is that all dependencies are included with the app package. And Windows will only look in that package for the DLL.
This makes uses a .winmd file a bit less than useful. You'd only consider it in a large product that's built from many separate solutions that get packaged separately.