1

我有一个使用引用库的应用程序。该库又引用了一个 .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)

这种奇怪行为的原因可能是什么?

4

2 回答 2

2

这不是奇怪的行为。WinRT 硬性阻止了 DLL Hell,这是您不能指望商店用户解决的问题。一个非常硬的要求是所有依赖项都包含在应用程序包中。Windows 只会在该包中查找 DLL。

这使得使用 .winmd 文件有点用处不大。您只会在由许多单独打包的单独解决方案构建的大型产品中考虑它。

于 2013-08-02T16:23:20.877 回答
2

托管 WinRT 类型有时可以在 winmd 文件中嵌入代码。但是,如果 .net 程序集包含任何不是 WinRT 类型的公共类型,它们将位于具有 .Dll 扩展名的 .Net 程序集中。您的组件可能包含 DLL 和 winmd 文件中的代码。

于 2013-08-02T22:06:57.913 回答