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

问题描述 投票:102回答:19

我正在尝试部署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.

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

哪些清单需要更正?以及如何?

c# visual-studio-2010 clickonce
19个回答
111
投票

[是an issue with Visual Studio 2008 which is solved by not embedding the default manifest-该文章的评论之一表明该问题在Visual Studio 2010中仍然存在。

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


54
投票

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

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

对我来说,解决此问题的方法是确保解决方案下所有在其“ 项目属性”中显示“ 安全选项卡”的项目都具有选项“ 启用ClickOnce安全性”。设置“选中选项” 这是一个完全信任的应用程序“勾选。这与正确创建清单有关,如果未在需要它的解决方案中的所有项目上都未设置这些选项,则该应用程序将无法安装。

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

链接的论坛帖子目前已过期,但可以在存档here中找到。


35
投票

我遇到了同样的问题,但是我的解决方案却大不相同。

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

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


11
投票

我确认Visual Studio 2010中也存在此问题。在“项目属性-应用程序-资源”中选择“创建没有清单的应用程序”即可解决该问题。


6
投票

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


4
投票

我有同样的问题,但是我的解决方案是将'Platform target'更改为'x86'(Project Properties-> Build Tab)。它设置为“任何CPU”。更改设置并重新发布后,ClickOnce安装程序就可以完成。


4
投票

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


4
投票

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

我更改为类库,然后一切正常。


2
投票

另一种解决方法,以防止带有不良应用清单的依赖项exe不能更改(例如,来自NuGet包)。二进制文件可以作为内容包含在虚拟扩展名中,因此ClickOnce不会尝试验证清单,然后在应用程序启动期间重命名。

csproj:

  <Content Include="..\packages\<package>\lib\<app>.exe">
    <Link><app>.exe.bin</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
  <ItemGroup>
    <PublishFile Include="<app>">
      <Visible>False</Visible>
      <Group>
      </Group>
      <TargetPath>
      </TargetPath>
      <PublishState>Exclude</PublishState>
      <IncludeHash>True</IncludeHash>
      <FileType>Assembly</FileType>
    </PublishFile>
  </ItemGroup>

App.xaml.cs:

public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        var appDir = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
        if (!File.Exists($"{appDir}\\<app>.exe"))
        {
            File.Copy($"{appDir}\\<app>.exe.bin", $"{appDir}\\<app>.exe");
        }
    }
}

1
投票

我遇到了同样的问题,我在这里尝试了所有以前建议的解决方案,但是它们都不起作用。

我通过更改更新位置来修复它。从项目属性-> 发布-> 更新。将更新位置更改为已发布的文件夹。


1
投票

也解决了ClickOnce .exe调用.exe调用.exe。

我在Visual Studio 2010中使用VB.NET时也遇到了这个问题。

我有一个ClickOnce Windows Forms应用程序,该应用程序引用了第二个Windows Forms应用程序,而该应用程序又引用了第三个Windows Forms应用程序。 (为简便起见,这些第二和第三个应用程序是EXE文件,而不是DLL文件,因为它们同样有可能独立运行或通过传递给它们的属性来调用。)

我必须分别将第二和第三应用程序的清单内容都注释掉:

Walkthrough: Manually Deploying a ClickOnce Application

效果很好。


1
投票

如果您有一个引用另一个程序的主程序,那么您必须在主程序的程序上执行“创建没有清单的应用程序”的技巧:

项目->属性->应用程序选项卡->资源->清单->下拉“创建没有清单的应用程序”

然后切换到引用程序的项目属性并重复该过程。


0
投票

我正在Windows 7上使用Visual Studio 2012,需要发布由两个项目组成的解决方案。

正如Eduardo指出的,将两个项目都标记为ClickOnce,然后启用完全信任应用程序可以解决问题。


0
投票

我有一个其他问题可以解决,所以我想发表。我的问题是我在TFS中运行了3个分支。我已经在一个分支机构升级了Telerik控件,但没有升级其他分支机构。一旦我在所有三个分支中升级了Telerik控件并重新发布,它就可以工作了,这个错误消失了。

我当时正在运行VS2015。


0
投票

这很有趣。我只是重新部署了应用程序并解决了问题。可能是由于网络导致文件损坏。


0
投票

我使用mage.exe生成清单。将此添加到我的.csproj中解决了此问题。您也可以尝试-nowin32manifest compiler flag;我还没有测试。我在Visual Studio 2017中看不到stuartd的“创建没有清单的应用程序”。我认为这是它的作用。

<PropertyGroup>
  <NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>

我的.csproj中也有这个:

<GenerateManifests>false</GenerateManifests>

0
投票

在我的Visual Studio 2017版本中,版本15.6.6(但可能早于该版本),我发现应用程序文件不在“右键单击Exe项目并发布”中,而是在“项目属性发布”选项卡下,设置要放置在安装中的哪个应用程序文件。

因此,请排除有问题的那些。如果要安装此应用程序的计算机上已经安装了某些软件,则没有任何理由尝试重新安装它,除非您需要参考才能运行它。如果要安装PC上已经安装的文件,但是将其安装到其他文件夹,则可能无法正常工作。最好将其他应用程序或dll程序集用于以前安装的位置。


0
投票

几分钟前我遇到了同样的问题,下面是我用来解决该问题的步骤。

[Key

  • a =主项目(您要发布的项目,例如myProduct)
  • b =参考项目(例如MyProductSiteServer)

清单

  1. 导航至属性->应用程序->资源->检查图标和清单(对于a和b)

  2. 导航至属性->构建:确保a和b在同一目标平台上

  3. 导航至属性->安全性,并确保a和b选中了以下设置:“启用ClickOnce安全性设置”和“这是一个完全信任的应用程序”

  4. 导航到属性->发布:建议您更改发布文件夹的路径


0
投票

我在VS 2019应用程序中遇到了完全相同的问题。

我已经尝试创建没有清单的应用程序,但是那没有用。

然而,下面的工作是什么:

  1. 转到Build-> Publish-> Application
  2. 单击“组装信息”按钮
  3. 勾选“使程序集COM可见”选项>
  4. 希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.