我有一个 win form 应用程序,我可以为它创建一个安装程序并进行安装。但是,当涉及到一键部署时,它不起作用,我收到以下错误。
"Application Validation did not succeed. Unable to continue"
当我点击更多细节时,我得到以下信息。
检测到以下失败消息:
- Reference in the manifest does not match the identity of the downloaded assembly Designer.exe.
我尝试了许多不同的修复方法,但都没有成功。
有谁知道我如何解决这个问题?
最佳答案
Cant seem to find any information about it at all.
有很多关于此的信息,只需谷歌错误消息。正确的查询是“ list 中的引用与下载的程序集的标识不匹配”,您会发现许多描述变通方法的好文章。
我将尝试做的不仅仅是添加另一个谷歌搜索并解释潜在的问题。没有人解释到底出了什么问题。并希望有助于涵盖难以诊断的情况。问题在于可执行文件(应用程序 list )的一个非常糟糕的文档属性。请注意,“ list ”一词在 Windows 中的含义很多,应用程序 list 与 ClickOnce list 不同。
应用程序 list 向可执行文件添加了额外的配置。自 Vista 以来它们非常重要,您需要一个标记您的程序以与 UAC 兼容。其他几种用途,您需要条目以使用无注册表的 COM、改变 Windows 查找依赖 DLL 的方式、禁用 Windows appcompat 垫片或告诉 Windows 8.1 停止对其版本号撒谎。
与您的问题相关的一个问题是 两个为可执行文件提供 list 的方法。首选方法是将其嵌入可执行文件本身。作为非托管资源嵌入。这是在使用默认设置构建 Winforms 应用程序时完成的方式。 C# 或 VB.NET 编译器嵌入了一个默认的编译器。或者您使用应用程序 list 文件项模板添加到项目中的特定文件。嵌入它是首选,因为它限制了 list 可能丢失或修补的方式数量。并且是 Windows 将首先寻找的。
或者它可以作为单独的文件提供,它必须命名为 yourapp.exe.manifest 并与 yourapp.exe 存储在同一目录中。这是发布向导执行此操作的方式,您可以在发布文件夹中找到它,并将其与可执行文件一起复制到目标计算机。
也许你能嗅到迫在眉睫的问题,两个 list ,它们不匹配。 System.Deployment 遵循 Windows 规则并首先查找嵌入式 list 。它将找到 C# 编译器嵌入的默认值。它根据 ClickOnce list 中声明的身份检查程序集标识。如果不匹配,kaboom 会显示“ list 中的引用与下载的程序集的身份不匹配”。它认为可执行文件在通过中间人攻击从您的 Web 服务器传输到用户计算机时被替换。
首先查看嵌入在可执行文件 (Designer.exe) 中的非托管资源,即 System.Deployment 首先查看的非托管资源,开始诊断此问题。在 Visual Studio 中,使用 File + Open + File 并从发布文件夹中选择 Designer.exe。它可能类似于:
ID #1 的 RT_MANIFEST 条目是嵌入式应用程序 list 。您可以双击它进行查看,但您将获得内容的十六进制转储。更简单的方法是右键单击、导出并指定 .txt 文件名,以便您可以使用文本编辑器查看它。它会像这样:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
<assemblyIdentity>
元素是麻烦制造者。请注意它的通用名称“MyApplication.app”和默认版本号 1.0.0.0。如果您查看发布向导生成的 yourapp.exe.manifest 文件,您将看到如下内容: <asmv1:assemblyIdentity name="WindowsFormsApplication86.exe" version="1.0.0.0"
publicKeyToken="e939ba736dc34835" language="neutral"
processorArchitecture="msil" type="win32" />
差远了。卡布姆
解决这个问题的几种方法:
关于c# - VS 2010 一键部署问题 "Application Validation did not succeed. Unable to continue",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21697109/