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

1

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 ?

c#
windows-8
windows-runtime
clr
winmd
asked on Stack Overflow Aug 2, 2013 by lysergic-acid

2 Answers

2

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.

answered on Stack Overflow Aug 2, 2013 by Hans Passant
2

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.


User contributions licensed under CC BY-SA 3.0