c# - VS 2010 一键部署问题 "Application Validation did not succeed. Unable to continue"

标签 c# deployment oneclick

我有一个 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.


我尝试了许多不同的修复方法,但都没有成功。
  • 我试图用 list 创建应用程序。
  • 我已经删除了所有先决条件。
  • 我还更改了要包含的所有应用程序文件。

  • 有谁知道我如何解决这个问题?

    最佳答案

    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。它可能类似于:

    enter image description here

    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" /> 
    

    差远了。卡布姆

    解决这个问题的几种方法:
  • 在可执行文件的 File + Open + File View 仍然打开的情况下,右键单击 list ID #1 并选择删除。这将完全删除它,System.Deployment 现在将找到该文件而不是
  • 项目 + 属性,应用程序选项卡,将 list 选项更改为“创建没有 list 的应用程序”。这应该是您首选的解决方案
  • 如果您需要自定义 list 并使用了应用程序 list 文件,则必须再次将其删除,而是编辑发布向导生成的 yourapp.exe.manifest 文件。这是非常痛苦的,最好避免,因为您需要重复执行此操作
  • 更新你的 VS 版本,这个问题已经修复,现在它足够聪明,可以在你发布时重建你的项目,现在没有默认 list 。我认为从 VS2012 开始,绝对是 VS2013。
  • 关于c# - VS 2010 一键部署问题 "Application Validation did not succeed. Unable to continue",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21697109/

    相关文章:

    vsto - Unknown Publisher 仍然出现在使用 VS2010 构建的正确代码签名的 VSTO 插件上

    javascript - 如何使用 JAVASCRIPT 在 onclick 事件中传递两个参数,如 id 和 title

    C#泛型类型和存储库模式

    ruby - Capistrano 登录 Net::SSH 失败

    ruby-on-rails-3 - 错误——: uninitialized constant Airbrake (NameError)

    linux - 如何防止和保护 Jenkins 中的生产部署作业不被意外触发?

    delphi - Delphi win32 应用程序的自安装程序

    c# - 将Python RSA解密脚本转换为C#,输出仅是最后16B而不是128B

    c# - 站点的状态属性在 IIS Express 中抛出 "NotImplementedException"

    c# - 什么导致 .NET 中的内存碎片