Runtime attempts to look for exe/dll instead of the .winmd reference

564 views Asked by At

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 ?

2

There are 2 answers

4
Hans Passant On

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.

0
Larry Osterman On

Managed WinRT types can sometimes have code embedded in the winmd file. However if the .net assembly contains any public types that aren't WinRT types, they will be in a .Net assembly with the .Dll extension. It's possible that your component contains code in the DLL as well as the winmd file.