部署ClickOnce应用程序时出错 - 清单中的引用与下载的程序集的标识不匹配

Sha*_*ica 94 c# clickonce visual-studio-2010

我正在尝试部署ClickOnce应用程序,但在客户端上安装失败.这是错误日志:

PLATFORM VERSION INFO
Windows             : 6.1.7601.65536 (Win32NT)
Common Language Runtime     : 4.0.30319.1
System.Deployment.dll       : 4.0.30319.1 (RTMRel.030319-0100)
clr.dll             : 4.0.30319.1 (RTMRel.030319-0100)
dfdll.dll           : 4.0.30319.1 (RTMRel.030319-0100)
dfshim.dll          : 4.0.31106.0 (Main.031106-0000)

SOURCES
Deployment url          : http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application
                    Server      : Microsoft-IIS/7.5
                    X-Powered-By    : ASP.NET
Deployment Provider url     : http://MyProduct.com/Download/Workstation/MyProduct%20Front%20Desk.application
                    Server      : Microsoft-IIS/7.5
                    X-Powered-By    : ASP.NET
Application url         : http://MyProduct.com/Download/Workstation/Application%20Files/MyProduct%20Front%20Desk_1_0_0_7/MyProduct%20Front%20Desk.exe.manifest
                    Server      : Microsoft-IIS/7.5
                    X-Powered-By    : ASP.NET

IDENTITIES
Deployment Identity     : MyProduct Front Desk.application, Version=1.0.0.7, Culture=neutral, PublicKeyToken=df343a0868ab2d74, processorArchitecture=msil
Application Identity        : MyProduct Front Desk.exe, Version=1.0.0.7, Culture=neutral, PublicKeyToken=df343a0868ab2d74, processorArchitecture=msil, type=win32

APPLICATION SUMMARY
* Installable application.

ERROR SUMMARY
Below is a summary of the errors, details of these errors are listed later in the log.
* Activation of http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application resulted in exception. Following failure messages were detected:
    + Reference in the manifest does not match the identity of the downloaded assembly MyProductSiteServer.exe.

COMPONENT STORE TRANSACTION FAILURE SUMMARY
No transaction error was detected.

WARNINGS
There were no warnings during this operation.

OPERATION PROGRESS STATUS
* [03/17/11 11:51:04] : Activation of http://MyProduct.com/download/workstation/MyProduct%20Front%20Desk.application has started.
* [03/17/11 11:51:04] : Processing of deployment manifest has successfully completed.
* [03/17/11 11:51:04] : Installation of the application has started.
* [03/17/11 11:51:05] : Processing of application manifest has successfully completed.
* [03/17/11 11:51:06] : Found compatible runtime version 4.0.30319.
* [03/17/11 11:51:06] : Request of trust and detection of platform is complete.

ERROR DETAILS
Following errors were detected during this operation.
* [03/17/11 11:51:30] System.Deployment.Application.InvalidDeploymentException (RefDefValidation)
    - Reference in the manifest does not match the identity of the downloaded assembly MyProductSiteServer.exe.
    - Source: System.Deployment
    - Stack trace:
        at System.Deployment.Application.DownloadManager.ProcessDownloadedFile(Object sender, DownloadEventArgs e)
        at System.Deployment.Application.FileDownloader.DownloadModifiedEventHandler.Invoke(Object sender, DownloadEventArgs e)
        at System.Deployment.Application.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next)
        at System.Deployment.Application.SystemNetDownloader.DownloadAllFiles()
        at System.Deployment.Application.FileDownloader.Download(SubscriptionState subState)
        at System.Deployment.Application.DownloadManager.DownloadDependencies(SubscriptionState subState, AssemblyManifest deployManifest, AssemblyManifest appManifest, Uri sourceUriBase, String targetDirectory, String group, IDownloadNotification notification, DownloadOptions options)
        at System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState subState, ActivationDescription actDesc, Int64 transactionId, TempDirectory& downloadTemp)
        at System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState, ActivationDescription actDesc)
        at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
        at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)

COMPONENT STORE TRANSACTION DETAILS
No transaction information is available.
Run Code Online (Sandbox Code Playgroud)

我需要部署的主要exe是MyProductFrontDesk.exe,它依赖于MyProductSiteServer.exe- 并且似乎是抛出错误的地方:"清单中的引用与下载的程序集MyProductSiteServer.exe的标识不匹配."

哪个清单需要纠正?如何?

stu*_*rtd 106

Visual Studio 2008存在一个问题,它通过不嵌入默认清单来解决 - 该文章中的一条评论表明问题仍存在于Visual Studio 2010中.

在项目属性 - > 应用程序选项卡 - > 资源 - >复选框图标和清单中,设置"使用默认设置嵌入清单"导致问题.将其设置为"创建没有清单的应用程序"可以解决问题.

  • 与VS 2013有同样的问题.这个解决方案有效. (7认同)
  • 我的场景是一个GUI应用程序,需要第二个应用程序是一个控制台应用程序.如果像我一样你不想更改默认设置,手动发布第二个应用程序创建了一个出现在Properties文件夹中的app.manifest,然后再次发布第一个应用程序,而无需更改嵌入清单的默认设置. (4认同)
  • 截至2016年6月,正确的答案是配置**ClickOnce安全设置**(请参阅Mauro发布的答案). (3认同)
  • @EagleBeak VS2013中的这个菜单在哪里?我没有看到任何关于"创建没有清单的应用程序" (2认同)

Mau*_*uro 49

当我添加对另一个项目的引用时,我遇到了同样的问题.

解决这个问题的方法是在所有引用的项目中启用ClickOnce安全设置,如Ian 在此解释的那样(强调我的):

对我来说,解决这个问题的方法是确保在" 项目属性 "中公开" 安全选项卡 " 的解决方案下的所有项目都有选项" 启用ClickOnce安全设置 "选项"选中" 这是一个完全信任申请 "选中.这与正确创建清单有关,如果未在需要它的解决方案中的所有项目上设置这些选项,则无法安装应用程序.

我相信这是在同一解决方案下引用另一个项目时修复它的正确方法.

链接的论坛帖子现已过期,但可在此处存档.

  • 这应该标记为**接受的答案**. (13认同)

ski*_*nia 35

我遇到了同样的问题,但我的解决方案却截然不同.

我的ClickOnce应用程序在我的解决方案中引用了另一个EXE文件项目,因此当客户端下载它时,还有另一个EXE文件,那个文件没有清单.

删除对另一个可执行文件的依赖解决了我的问

  • 这是我的解决方案.我的主要EXE引用的项目之一本身就是一个"Windows应用程序".当我将该项目更改为"类库"并重新发布时,一切正常. (10认同)
  • 我也有两个EXE.删除依赖项会从构建中排除引用的EXE.有没有办法包括它? (2认同)

小智 10

我确认Visual Studio 2010中也存在该问题.在项目属性 - 应用程序 - 资源中选择"创建没有清单的应用程序"解决了该问题.

  • 只是注意我必须在错误消息抱怨的项目上更改此属性,对我来说这是我正在尝试发布的项目引用的项目,而不是我实际尝试发布的项目. (6认同)

Bit*_*ler 6

如果您在项目中的不同DLL文件中引用了两个不同版本的NuGet包,也会发生这种情况.在我的情况下,我使用的是一个名为Catel的框架,我在一个DLL文件中引用了一个比另一个(监督)更新的版本,但是这导致ClickOnce吐出这个错误.引用相同版本解决了问题.


小智 6

在将项目设置为 Debug 进行部署时,我遇到了同样的错误。当它改回 Release 时,没有错误。


小智 5

我有完全相同的问题。我无法删除依赖项,因为主项目需要它。第二个项目是控制台项目。

我改为Class Library,然后一切正常。