【问题标题】:Using local copy of an infragistics DLL vs the copy in the GAC使用基础设施 DLL 的本地副本与 GAC 中的副本
【发布时间】:2016-08-02 10:55:59
【问题描述】:

我们使用基础设施库已经很长时间了。但是现在我们遇到了一个问题,这里已经解决了Cannot select Infragistics controls in winform designer

我现在更具体的问题是,为什么我们所有同事的电脑都没有出现这个问题,而只出现在我的电脑上?我们有相同的 Visual Studio 解决方案,所有源代码都来自一个 subversion 存储库。

我们决定将 infragistics dll 的副本放到项目中的控件目录中,这样我们以后可以通过将文件复制并粘贴到目标目录中来非常轻松地部署它(但我们仍然需要一个安装工具来安装第一次)。

我们如何确保满足以下要求(有用与否)?

  • 仍然可以通过复制和粘贴来更新应用程序。
  • developper 通过将所需的基础 dll 复制到控制目录(然后复制到应用程序可执行目录)来跟踪它们。
  • 没有出现上述链接的问题

也许我们错过了一些重要的事情?

  • 通过简单地将较新的文件复制到应用程序目录来更新应用程序是不好的做法吗?或者在某种程度上它甚至是“非法的”?
  • 基础设施工具需要通过 setup 或 msi 安装程序安装吗?或者复制它们就足够了?

[编辑#1]:

为了澄清事情,因为我知道出了什么问题(请参阅上面的链接)以及可能的解决方案是什么,我需要一些很好的论据来支持或反对不使用控制目录,以了解我们在没有设置的情况下部署应用程序的做法当它更新时。我们需要让我们的客户能够在没有设置的情况下更新我们的应用程序,因为在他的工厂里他需要一次更新几台计算机,如果他能够在不需要设置的情况下做到这一点,那就更多了与设置方式相比具有成本效益。

【问题讨论】:

  • 一些 DLL 需要使用 regsvr32 注册,这是安装程序通常会处理的事情。也许这就是问题所在?
  • 你摆脱困境的方式是一种非常糟糕的做法。您永远不能假设 GAC 有可用的适当程序集。必须始终使用引用程序集来构建程序。就像您对 .NET 框架程序集所做的那样,例如,存储在 c:\program files (x86)\reference 程序集中。如果供应商的安装程序没有提供它们,那么您必须创建它们,在众所周知的位置制作您自己的副本。然后将它们检查到源代码控制中,这样一两年后您仍然可以构建。
  • @Hans Passant:通过使用我们解决方案文件夹中的控制目录,我们认为它是正确的。但看起来 (stackoverflow.com/questions/16320746/…),这会导致一些意想不到的行为。我有同样的问题,但我的同事没有。
  • 您是否使用 Infragistics 提供的工具来更新您的项目?您的 controls 目录 是否也位于每台 PC 的本地?引用固定的 DRIVE+LOCATION 可能会导致其他 PC 出现问题,反之亦然
  • 因为我不是项目的主要开发者,所以我不知道是否使用了该工具,但第二点不是问题——我们在项目驱动器和目录上都使用相同的目录结构。

标签: c# dll infragistics gac


【解决方案1】:

这是我的两分钱:

  • 尝试将所有 Infragistics 库的 Copy Local 属性设置为 True。 这将在您每次构建时将 dll 复制到 bin 文件夹 应用。这可以解决您遇到的问题 通过复制粘贴更新应用程序;
  • 每个开发人员最好将库安装到 GAC 中。我想你们所有人都在使用这些库的相同版本。 否则,将是真正的混乱。如果由于某种原因,您没有使用相同的版本,请尝试将每个 Infragistics dll 特定版本设置为 False
  • 如果所有控件都出现在组件尝试中(在设计器中),这清楚地表明,Designer.dll 已损坏或未找到。因此,将 dll 安装到 GAC 中始终是一个好主意 - 这也应该在其中添加 Infragistics Designer dll,您应该不会遇到这个问题。

因此,将所有内容安装到 GAC 中,将 Copy Local 设置为 true,并将 Specific Version 设置为 false。

当您需要升级包含 Infragistics 库的项目时,请使用他们的好工具 Version Utility - 这可以为您节省很多工作

【讨论】:

  • 第一点现在没问题。只有开发者有问题。第二点,我们始终为所有开发人员安装相同的版本。第三点听起来相当不错 - 因为使用 dll 的本地副本而不是 gac 副本可能会忽略设计器 dll。我认为你的回答似乎是迄今为止最好的回答我的问题
  • 我建议不要在引用上将特定版本设置为 False,因为如果一个开发人员使用不同的版本,这可能会导致混淆,因为两个开发人员在运行相同的源时可能会在本地看到不同的行为,而您可能不会意识到您实际上使用的是不同版本的 Infragistics 工具集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2010-12-23
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多