eea*_*dev 17 .net c# wpf windows-runtime
我的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'或其依赖项之一.尝试加载格式不正确的程序.
我已经尝试过禁用此处建议的ClickOnce ,清理项目并删除不同.NET框架的ASP.NET临时.
这是我的app.config中的启动标记
我正在使用VS2015和C#如何修复它并生成我的msi?
PS:使用简单的WPF桌面应用程序生成另一个msi没问题.
Han*_*ant 41
是的,您添加的Windows.winmd文件作为参考是部署项目的障碍.您使用的工具对其内容感到困惑,它看起来就像.NET程序集.但事实并非如此,.winmd文件格式是旧的COM类型库格式的扩展.对于WinRT,他们使用.NET的元数据格式来克服TLB文件格式的限制.
这是一个非常好的主意,许多.NET工具可以按原样使用元数据.与编译器和反汇编器一样,他们不必将所有基础设施都放在适当的位置.但它严格地扮演参考汇编的角色,只有编译器使用其内容并且永远不应该部署它.现在你不太喜欢那个好主意:)
但是,修复ClickOnce部署非常容易.使用项目>属性>发布选项卡>应用程序文件按钮.将Windows.winmd的"发布状态"选项更改为"排除".示例项目屏幕截图:
目前还不是很清楚"Microsoft Installer"是什么意思,我假设你谈到了一个安装项目.虽然由于长期问题而从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程序工作正常.
| 归档时间: |
|
| 查看次数: |
10140 次 |
| 最近记录: |