无法安装或运行应用程序:Click Once

31
我使用ClickOnce发布我的.NET应用程序,但是所有用户在尝试打开程序时都会收到以下错误消息:
"无法安装或运行应用程序。应用程序需要首先安装程序集Telerik.Windows.Data Version 2012.1.215.40于全局程序集缓存(GAC)中"。
我实际使用的版本比错误消息中提到的版本更新。我在用于开发应用程序的计算机上也没有遇到此问题。我想知道为什么它会寻找旧版本的dll。我找不到它在我的应用程序中的引用位置。
请问能否帮我解决这个问题?

1
你的应用程序是否包含汇编文件,还是需要从Telerik安装应用程序中安装?ClickOnce应用程序无法在GAC中安装dll。相反,它们必须由另一个安装程序放置在那里。 - RLH
在“属性”中,“发布”选项卡下的“应用程序文件”列表中,我将其设置为包括(自动)。实际上,我甚至不需要那个dll。我已经将它从项目中排除了,但是我仍然有同样的问题。你不知道为什么ClickOnce(或它创建的安装包)需要那个过时的dll吗? - David Shochet
1
不,除非在项目中引用了它,否则不应该查找它。抱歉,我现在有点困惑。 - RLH
但不知何故,某种方式上还是在寻找那个.dll文件... - David Shochet
1
“Obsolete” dll 可能是必需的,因为它被您的某个引用所引用。 - Avi Turner
对于其他人来说,Avis上面的评论对我来说是解决方案。确保您的所有Telerik DLL版本相同。 - aw04
4个回答

42

我在这里找到了解决方案:

http://ablogontech.wordpress.com/2009/01/02/unable-to-install-or-run-the-application-the-application-requires-that-the-assembly-be-installed-in-the-global-assembly-cache-gac-first/

以下是这篇wordpress链接中的摘录:

在编译我的第一个C#生产应用程序时,我遇到了这个错误。我需要在Visual Studio中为项目执行以下操作:

  1. 在“解决方案资源管理器”中展开“引用”节点,然后单击出现错误的程序集,确保“属性”网格中的“复制本地”设置为“True”。
  2. 在项目的属性中,“发布”|“应用程序文件”选项卡,确保出现错误的程序集的发布状态设置为“Include”

3
在我的情况下,导致这个错误信息的问题是由于错误的库发布配置。
当我将库属性CopyLocal=false设置后,再在项目发布应用程序文件中设置Publish StatusInclude,在重新构建项目并进行下一次发布后,所有都能正常工作。
因此,我们告诉ClickOnce编译器默认情况下不要发布该库与应用程序一起,通过将发布状态从Prerequisites更改为Include告诉ClickOnce不在GAC中搜索该库。

这是我的问题。我愚蠢地将app.config文件添加为嵌入式资源。将其设置为“none”,我就不会遇到这个问题了。 - thatOneGuy

1
如果在依赖项目中引用了相同dll的两个版本,则这将是错误的根本原因之一。
我遇到过这种情况,并抱怨NLog.dll,我发现我的应用程序引用了Nlog.dll的一个版本,而我的库项目引用了另一个版本,并且清单列出了一个版本作为依赖项(安装),另一个版本作为依赖项(必需即需要存在于系统中,即使将其复制到本地设置为true)。

1
你还需要检查一下你的app.config文件中是否存在错误的程序集绑定重定向。寻找一个类似于以下节点的标签:
  <dependentAssembly>
    <assemblyIdentity name="Telerik.Windows.Data" publicKeyToken="--SomePublicToken--" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-3.0.2.0" newVersion="3.0.2.0"/>
  </dependentAssembly>

确保范围oldnew是有意义的,或者说,这个节点本身是有意义的。我第一次尝试的方法是简单地将其删除并重新检查。有时候,一些NuGet包会在旧版本中干扰配置文件,并且在更新版本中不再需要该节点(且不会自动删除)。


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