我有一个使用引用库的应用程序。 该库反过来引用.winmd库。
查看引用的库的IL,我可以看到这个引用:
.assembly extern windowsruntime FlurryWin8SDK
{
.ver 0:9:0:0
}
然而,在运行时,我得到一个例外:
{"Could not load file or assembly 'FlurryWin8SDK' or one of its dependencies. The system cannot find the file specified.":"FlurryWin8SDK"}
此外,通过使用Procmon,我看到有尝试搜索FlurryWin8SDK.exe和FlurryWin8SDK.dll,但没有搜索扩展名为.winmd的文件。
此外,这是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)
这种奇怪行为可能是什么原因?
答案 0 :(得分:2)
这不是奇怪的行为。 WinRT给DLL Hell带来了一个难以停止的问题,这是你不能指望商店用户进行故障排除的问题。一个非常困难的要求是应用程序包中包含所有依赖项。 Windows只会在DLL的包中查找。
这使得使用.winmd文件略微有用。您只能在一个大型产品中考虑它,这个产品是由许多单独解决方案构建的。
答案 1 :(得分:2)
托管WinRT类型有时可以在winmd文件中嵌入代码。但是,如果.net程序集包含任何非WinRT类型的公共类型,它们将位于具有.Dll扩展名的.Net程序集中。您的组件可能包含DLL中的代码以及winmd文件。