31

我使用 ClickOnce 发布了我的 .net 应用程序,我的所有用户在尝试打开程序时都会收到以下错误消息:

“无法安装或运行该应用程序。该应用程序要求先将程序集 Telerik.Windows.Data 版本 2012.1.215.40 安装在全局程序集缓存 (GAC) 中”。

我在应用程序中实际使用的版本比错误消息中提到的版本新。我用来开发应用程序的机器上也没有这个问题。我想知道为什么它要寻找旧版本的 dll。我找不到我的应用程序引用它的位置。

你能帮我解决这个问题吗?

4

4 回答 4

41

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

http://ablogontech.wordpress.com/2009/01/02/unable-to-install-or-run-the-application-the-application-requires-that-the-assembly-be-installed-in-the-全局程序集缓存-gac-first/

摘自wordpress链接:

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

  1. 在解决方案资源管理器中,展开引用节点并单击错误中列出的程序集。确保“属性”网格中的“复制本地”设置为“真”。
  2. 在项目的属性中,发布 | 应用程序文件选项卡,确保错误中列出的程序集的发布状态设置为“包含”</li>
于 2012-07-19T14:48:23.380 回答
3

就我而言,导致此错误消息的问题是库发布配置不正确。

当我设置我的库属性CopyLocal = false,然后在项目发布应用程序文件中将Publish Status设置为Include,在项目重建和下次发布后一切正常。

因此,我们告诉 ClickOnce 编译器,默认情况下不要使用应用程序发布此库,并通过将 Publish State 从Prerequisites更改为Include告诉 ClickOnce,不要在GAC中搜索此库。

于 2015-10-06T10:01:39.433 回答
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 包可能会与旧版本中的配置文件混淆,并且在新版本中不再需要此节点(并且不会自动删除)。

于 2017-01-09T15:07:34.287 回答
1

如果在依赖项目中引用了相同 dll 的两个版本,那么这将是错误的根本原因之一。

它发生在我身上并抱怨 NLog.dll,我发现我的应用程序引用了 Nlog.dll 的一个版本,而我的库项目引用了 Nlog.dll 的另一个版本,并且清单将一个版本列为依赖项(安装),将另一个版本列为依赖项(必要条件,即需要存在于系统中,甚至复制到本地设置为 true)。

于 2018-10-16T22:19:06.860 回答