c# – VS 2010一键式部署问题“应用程序验证没有成功.无法继续“

我有一个获胜表单应用程序,我可以创建一个安装程序和安装.但是,当涉及到一个点击部署它不工作,我得到以下错误.

“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.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...