【问题标题】:Could not load file or assembly Windows.winmd'无法加载文件或程序集 Windows.winmd'
【发布时间】:2015-09-25 13:16:20
【问题描述】:

我的 WPF 桌面应用程序也在使用 WinRT 类。

为了做到这一点,我遵循本教程https://software.intel.com/en-us/articles/using-winrt-apis-from-desktop-applications

很好,它可以工作。

现在,当我尝试生成 msi 文件时(我尝试使用 Microsoft Installer 和 ClickOnce),我收到此错误:

生成清单时出现问题。无法加载文件或程序集“C:\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\Windows.winmd”或其依赖项之一。尝试加载格式不正确的程序。

我已经尝试按照here 的建议禁用 ClickOnce,清理项目并删除不同 NET 框架的 ASP.NET 临时文件。

这是我的 app.config 中的启动标记

我正在使用 VS2015 和 C# 如何修复它并生成我的 msi?

PS:我用一个简单的 WPF 桌面应用程序生成另一个 msi 没有问题。

【问题讨论】:

    标签: c# .net wpf windows-runtime


    【解决方案1】:

    是的,您作为参考添加的 Windows.winmd 文件是部署项目的障碍。您使用的工具会对其内容感到困惑,它看起来就像一个 .NET 程序集。但事实并非如此,.winmd 文件格式是旧的 COM 类型库格式的扩展。对于 WinRT,他们使用 .NET 的元数据格式来突破 TLB 文件格式的限制。

    这是个好主意,许多 .NET 工具可以按原样使用元数据。与编译器和反汇编器一样,它们不必将所有基础设施都安装到位。但它严格扮演引用程序集的角色,只有编译器使用它的内容,它不应该被部署。现在你不太喜欢这个好主意:)

    但是,对于 ClickOnce 部署,修复它非常容易。使用项目 > 属性 > 发布选项卡 > 应用程序文件按钮。将 Windows.winmd 的“发布状态”选项更改为“排除”。示例项目屏幕截图:


    您所说的“Microsoft 安装程序”不是很清楚,我假设您谈论的是安装项目。尽管由于长期存在的问题而从 Visual Studio 中删除,但它仍然可以在库中找到。

    这是一个更难破解的问题,您通常会使用 Add > Project Output 上下文菜单项来让它找出依赖关系。那不再起作用了,它会以可悲的非描述性错误消息而死:

    错误:验证时出错。 HRESULT = '80070057'

    错误代码表示“参数无效”,这无助于缩小问题范围。但是您可以放心地假设它在尝试解析 .exe 程序集中的 Windows.winmd 引用时会死掉。

    解决方法是让它自动检测依赖项,而是自己选择它们。从标题为“目标机器上的文件系统”的编辑器屏幕中,选择应用程序文件夹。右键单击“来自...的主要输出”并选择删除。

    右键单击应用程序文件夹 > 添加 > 文件,然后从 bin\Release 文件夹中选择项目的 .exe 文件。对其他文件重复此操作,您可以使用在 ClickOnce 应用程序文件列表中获得的文件列表作为指南。

    构建项目,您现在得到:

    警告:无法找到程序集“WindowsFormsApplication144.exe”的依赖项“WINDOWS”(Signature='(null)' Version='255.255.255.255')

    这完全是良性的,我们不希望它找到它,Setup.exe 程序工作正常。

    【讨论】:

    • 谢谢@HansPassant,我明天试试,因为现在我只有一台 ubuntu 笔记本电脑。是的,我所说的“Microsoft Installer”是指一个安装项目,我之所以这么称呼它是因为我认为因为这个 Visual Studio 功能是在安装程序“Microsoft Installer”之后才存在的......
    • 它适用于 ClickOnce,但这不会生成 MSI 文件,对吧?如果我需要 MSI 怎么办?
    • 您从您所说的“Microsoft 安装程序”获得 MSI。这就是我测试的场景,我从中复制/粘贴了错误消息。
    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    相关资源
    最近更新 更多