“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.
有很多关于这个的信息,只是谷歌的错误信息.正确的查询是“清单中的引用与下载的程序集的标识不符”,并且您会发现许多描述解决方法的好的命中.
我会尝试做更多的事情,而不仅仅是添加另一个google命中,并解释潜在的问题.没有人解释真正出了什么问题.并希望有助于覆盖难以诊断的病例.问题是可执行文件的非常糟糕的文件属性,即应用程序清单.请注意,“清单”一词表示Windows中的许多内容,应用程序清单与ClickOnce清单不同.
应用程序清单为可执行文件添加额外的配置.它们自Vista以来非常重要,您需要一个将程序标记为与UAC兼容.其他几个用途,您需要使用无注册表COM的条目,更改Windows查找依赖DLL的方式,禁用Windows appcompat垫片或告诉Windows 8.1停止对其版本号进行说明.
与您的问题相关的一个问题是提供可执行文件的两种方式.首选方法是将其嵌入可执行文件本身.嵌入作为非托管资源.这是在使用默认设置构建Winforms应用程序时完成的方式. C#或VB.NET编译器嵌入一个默认值.或者使用“应用清单文件”项目模板添加到项目中的具体的一个.嵌入它是首选,因为限制清单可能丢失或修补的方式的数量. Windows将首先查找.
或者它可以作为单独的文件提供,它必须命名为yourapp.exe.manifest并存储在与yourapp.exe相同的目录中.这是“发布”向导将执行此操作的方式,您可以在发布文件夹中找到它,并将其与可执行文件一起复制到目标计算机.
也许你可以闻到即将到来的问题,两个表现并不匹配. System.Deployment遵循Windows规则,并首先查找嵌入式清单.它会找到C#编译器嵌入的默认值.它根据ClickOnce清单中声明的那个检查程序集身份.如果不匹配,那么具有“清单中的引用”的kaboom与下载的程序集的标识不符.它认为可执行文件在通过中间人攻击从您的Web服务器移动到用户的机器时被替换.
您首先查看嵌入在可执行文件(Designer.exe)中的非托管资源(System.Deployment首先看到的那些)来开始诊断此问题.在Visual Studio中,使用文件打开文件,然后从发布文件夹中选择Designer.exe.它可能会像这样:
ID为#1的RT_MANIFEST条目是嵌入式应用程序清单.您可以双击它来查看,但是您将获得内容的十六进制转储.更容易的是右键单击导出并指定.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" />
差远了. KABOOM
>随着可执行文件的文件打开文件视图仍然打开,右键单击清单ID#1,然后选择删除.完全删除它,System.Deployment现在将找到该文件>项目属性,应用程序选项卡,将清单选项更改为“创建没有清单的应用程序”.这应该是您的首选解决方案>如果您需要自定义清单并使用应用程序清单文件,那么您必须再次删除它,而是编辑“发布”向导生成的.app.exe.manifest文件.这是非常痛苦和最好的避免,因为你需要反复这样做>更新您的VS版本,这个问题已经修复,现在,当您发布时,现在可以重建项目,现在没有默认清单.我认为从VS2012开始,绝对是VS2013.