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

我正在尝试部署一个 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 的标识不匹配。”

哪些舱单需要更正? 如何更正?

83199 次浏览

还有 VisualStudio2008的一个问题,通过不嵌入默认清单解决了这个问题——关于那篇文章的一条评论表明,这个问题在 VisualStudio2010中仍然存在。

在项目属性-> 申请 tab-> 资源-> 复选框 图标和清单中,设置“带默认设置的嵌入清单”导致了问题。将其设置为“创建没有清单的应用程序”可以修复该问题。

我确认该问题在 VisualStudio2010中也存在。在“项目属性-应用程序-资源”中选择“创建没有清单的应用程序”解决了这个问题。

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

My ClickOnce application was referencing another EXE file project in my solution, so when the client downloaded it, and there was another EXE file, that one didn't have a manifest.

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

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

我换成了 班级图书馆然后就成功了。

如果在项目的不同 DLL 文件中引用了两个不同版本的 NuGet包,也可能发生这种情况。在我的例子中,我使用了一个名为 Catel 的框架,并且在一个 DLL 文件中引用了比另一个更新的版本(疏忽) ,但是这导致 ClickOnce 吐出了这个错误。引用相同的版本解决了这个问题。

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

也解决了 ClickOnce. exe 调用. exe 调用. exe 的问题。

我也有这个问题,在 Visual Studio 2010中使用 VB.NET。

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

我不得不注释掉 第二和第三个应用程序的清单内容:

演练: 手动部署 ClickOnce 应用程序

It works perfectly.

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

解决这个问题的方法是在所有参考项目中启用 ClickOnce 安全设置,伊恩解释了 给你(重点是我的) :

对我来说,解决这个问题的方法是确保所有在解决方案下的项目在其“ Project Properties”中暴露了“ 安全标签”,选项“ 启用 ClickOnce 安全设置”与选项“ 这是一个完全信任的应用程序”打勾。这与正确创建 Manifest 有关,如果没有在解决方案中需要它的所有项目上设置这些选项,则应用程序将不会安装。

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

这个链接的论坛帖子现在已经过期了,但是它可以在 给你档案中找到。

在将项目设置为 Debug 的情况下进行部署时,我也遇到过同样的错误。当它被更改回 Release时,没有错误。

我也遇到了同样的问题,我尝试了以前提出的所有解决方案,但都不管用。

我通过更改更新位置修复了它。从项目属性-> Publish-> 最新情况。将更新位置更改为已发布文件夹。

另一个解决方案是,如果不能更改带有坏应用程序清单的依赖项 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");
}
}
}

我在 Windows7上使用 VisualStudio2012,需要发布由两个项目组成的解决方案。

As Eduardo pointed out, marking both projects as ClickOnce, and enabling Full Trust Application resolves the problem.

我有一个不同的问题,我能够解决,所以我想发表。我的问题是我在 TFS 外运行3个分支。我升级了一个分行的 Telerik 控制系统,但其他分行没有。一旦我升级了所有3个分支的 Telerik 控件,并重新发布了它,这个错误就消失了。

当时我正在运行 VS2015。

It is interesting. I just redeploy the application and problem solved. Maybe a file corruption because of network.

我使用 mage.exe生成我的清单。将这个添加到我的 .csproj修复了这个问题。你也可以试试 -nowin32manifest 编译器标志,我还没有测试过。我没有在 VisualStudio2017中看到 Stuart 的“创建没有清单的应用程序”; 我认为这就是它所做的。

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

我的 .csproj里也有这个:

<GenerateManifests>false</GenerateManifests>

如果有一个主程序引用了另一个主程序,那么你必须在主程序的程序中使用“创建没有清单的应用程序”的技巧:

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

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

在我的 Visual Studio 2017版本15.6.6中(可能之前就有了) ,我发现应用程序文件不在右键单击 Exe 项目和发布中,而是在项目属性发布标签下,在那里你可以设置哪些应用程序文件你想要安装。

所以把那些有问题的人除掉。如果某个应用程序已经安装在计算机上,那么无论如何都没有理由尝试重新安装它,除非您需要引用才能运行它。如果它要安装什么已经在电脑上,但到一个不同的文件夹,它可能无法工作。最好将其他应用程序或 dll 程序集使用到与以前安装的位置相同的位置。

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

钥匙

  • A = Main project (要发布的项目,例如 myProduct)
  • B = 参考项目(例如 MyProductSiteServer)

清单

  1. Navigate to properties -> Application -> Resources -> check icons and manifest (for both a and b)

  2. 导航到 properties-> Build: 确保 a 和 b 在同一个目标平台上

  3. 导航到 properties-> Security 并确保 a 和 b 检查了这些设置: “ Enable ClickOnce Security sets”和“ This is a full trust application”

  4. Navigate to properties -> Publish : I recommend you change the path of the publishing folder

我的 VS 2019应用程序也有同样的问题。

我尝试过在没有清单的情况下创建应用程序,但是没有成功。

然而,真正起作用的是以下几点:

  1. 构建-> 发布-> 应用程序
  2. 点击“汇编信息”按钮
  3. 选择“使程序集 COM 可见”选项

希望这能有所帮助!

这个问题似乎是由 setup.exe 在 vs 2019中引起的。在执行新的部署时,exe 似乎不会更新它的版本。我的解决办法是

  1. 删除部署文件夹中的所有内容。
  2. 取消选中 Properties = > Publish = > Pre 必要条件中的“ Create setup program to install  建立安装程序以安裝必要組件”。
  3. 执行任务。
  4. 返回并重新启用“创建安装程序来安装必备组件”。 我猜这个过程将强制 vs2019将 setup.exe 更新为正确的版本。

还有项目—— > 属性—— > 应用程序选项卡—— > 资源—— > 清单—— > 下拉菜单“创建没有清单的应用程序”将工作,但应用程序不会更新,如果有一个更新的版本,所以我不得不回到上面的解决方案。

我也遇到过同样的问题,所以每当你更新一个程序集,我的情况是,我从 CR For 降级。从 Net Framework 4.0到 Framework 2.0,我用旧的程序集替换了所有引用的程序集,该项目运行良好,但为了发布

你必须清洁整个溶液

然后重建所有,然后发布它将解决问题。

谢谢

In my case 2 exe projects in a solution had .NET target set to 4.8 and 4.6.1. After I set both to 4.8, the error stopped.

我正在使用 VisualStudio2022,出现了错误。 通过在发布 > 应用程序文件中排除 Log4Net 文件解决了这个问题。

错误停止了