【问题标题】:Develop with the assembly but ship without the assembly与组件一起开发,但在没有组件的情况下发货
【发布时间】:2015-04-08 21:02:07
【问题描述】:

我为一个名为 BigClient 的客户工作。 BigClient 中的机器安装了名为 BigSoftware 的服务软件。但是我的计算机没有安装这个 BigSoftware。所以当我开发一个在这个 BigSoftware 之上运行的应用程序时,我需要从这个 BigSoftware 的 lib 文件夹中取出一个名为 TinyDll.dll 的程序集文件,并将其复制到我的计算机并从那里引用它。那么问题来了,我应该如何编写我的代码并配置我的 Visual Studio (C#) 来实现:

  1. 当我在 BigClient 中部署时,我不应该将这个 TinyDll.dll 与我的应用程序一起发布。我的应用程序应该从他们机器上的全局程序集缓存中加载这个 TinyDll.dll。

  2. 当我在我的计算机上进行本地部署时,我的应用程序应该从我的本地文件夹中引用这个 TinyDll.dll。

编辑:最后我发现我只需要 TinyDll.dll 来编译我的解决方案。但是这个 TinyDll.dll 不应该包含在我的部署中(因为否则我违反了许可协议)。然后我部署的应用程序会自动从 GAC 加载它。

【问题讨论】:

  • 您没有问题... 1/2 似乎是有效的合理陈述,所以不确定您在寻找什么...(请注意,在大多数情况下,只是在本地复制 TinyDll.Dll只会让你构建代码,而不是测试它 - 即在 SharePoint 的情况下)
  • @AlexeiLevenkov 如果我使用 TinyDll.dll 构建我的解决方案,然后在没有 TinyDll.dll 的情况下发布它,我的应用程序会自动从 BigClient 机器的全局程序集缓存中加载 TinyDll.dll 吗?
  • 很明显,来自 GAC 的程序集将被加载,无论您是否在本地有一个。因此,“TinyDll”是否随您的代码一起发布并不重要。
  • @AlexeiLevenkov 好的。谢谢!我还确认了当 TinyDll 没有附带的情况下,我的应用程序将从 GAC 加载 TinyDll。

标签: c# windows visual-studio deployment .net-assembly


【解决方案1】:

关于动态程序集加载,您可以使用一些方法和最佳实践,但对于大多数开发环境类型的问题,我喜欢在编写有助于您编写代码的代码之前先查看流程。

让我印象深刻的解决方案是:将此 TinyDll.dll 放在本地开发机器 GAC 中。然后你的解决方案无论如何都会从同一个地方加载它。

【讨论】:

  • 有很多开发机器,我无法将 TinyDll.dll 复制到每台机器。嗯,但这启发了我。如果 GAC 中存在任何版本,我应该首先检查 GAC 并使用 GAC 的 dll。如果没有,我会检查本地文件夹并从那里加载 dll。
猜你喜欢
  • 2010-12-16
  • 2012-02-10
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
相关资源
最近更新 更多