.NET ClickOnce不能安装前置文件?

9
我有一个使用Crystal Reports的.NET项目,该应用程序使用ClickOnce进行分发。如果用户在计算机上安装了Crystal,则一切正常。然而,并非所有最终用户都在计算机上安装了Crystal Reports,这些用户会收到以下错误消息...“无法安装或运行应用程序。应用程序要求首先安装程序集CrystalDecisions.ReportAppServer.XmlSerialize版本10.5.3700.0在全局程序集缓存(GAC)中。”是否有一种方法可以强制执行ClickOnce的安装以确保先安装先决条件?

你在 ClickOnce 发布设置中是否将 Crystal Reports 包含为先决条件了呢? - Vasu Balakrishnan
2个回答

11

不。有很多人对ClickOnce和先决条件感到困惑。

ClickOnce与先决条件毫无关系。它只是将文件从服务器复制到客户端机器,并在更新服务器文件时保持这些文件同步。它不能将东西放入GAC,注册dll,安装msi文件等。

混淆之处在于使用Visual Studio进行部署时。发布时,VS会为您做一些与ClickOnce无关的事情。首先,它会为您创建一个漂亮的html页面,其中包含指向您的部署的一些链接。此外,它允许您从几个先决条件中进行选择,并为您创建引导程序exe文件。我假设您为Crystal Reports安装执行了此操作。引导程序只是管理多个先决条件的简单方法。它可以跳过先决条件安装,如果用户已经安装它,则它们看起来就像是一个大安装程序一样"无缝"连接在一起。

如果您留意由VS生成的html页面,您可以看到两个链接。一个链接到您的.application文件(ClickOnce部署),另一个链接到引导程序exe。您基本上要依靠用户并且必须依赖于他们阅读该页面并运行引导程序(如果需要)。唯一的例外是.NET Framework,因为html页面可以通过UserAgent字符串检查它。

如果他们没有运行引导程序,他们将会收到类似于您要求的错误。

一个可能的解决方案是编写代码来检查是否已安装它。它可以检查注册表或"Program Files"文件夹;无论您需要做什么来确保已安装它。然后优雅地退出并通知用户如果他们没有它。只要在加载和使用Crystal程序集之前进行检查,那么这将起作用。

祝您好运!如果您想出更好的解决方案,请回复。


1
Whatknott,我读了你的其他几篇帖子,感觉我对这个主题有了更好的理解。谢谢你的确认和解释。 - proudgeekdad
不用客气。我还记得自己曾经在使用ClickOnce时遇到了同样的问题和挫折。希望我能为你节省一点痛苦 :) - codeConcussion

-1
在先决条件中,选择适用于 .Net Framework 的 Crystal Report(而不是适用于 Visual Studio 的 Crystal Report)并进行发布。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接