c# - 如何在不破坏应用程序引用的情况下从部署项目中重新定位程序集?

标签 c# deployment installation assemblies

我最近重构了很多应用程序的现有代码,现在我正在考虑整理部署方面的事情。

现有的安装程序应用程序安装应用程序文件夹中的所有内容(不包括位于子文件夹中的几个配置文件)。但是,我有多个应用程序都使用一些通用程序集,我的目标是将这些特定程序集重新定位到程序文件目录中的“Common Files” 文件夹。

注意:我已经阅读了很多关于 GAC 的内容但我没有这方面的经验,也看过一些恐怖故事,所以暂时尝试获得一个简单的解决方案。

我设法将程序集安装到 Common Files 文件夹中,但是,结果(典型的 I.T.)我破坏了我的应用程序!如果我将程序集复制回应用程序文件夹,它工作正常,所以问题显然与我的应用程序如何引用程序集有关。

为了让安装程序将程序集安装到 Common Files 文件夹中,我刚刚更新了 Detected Dependencies 列表中每个程序集的 Folder 属性。我的想法是,当我这样做时,安装程​​序会以某种方式更新我的应用程序以告诉它在该文件夹中查找它们,但情况似乎并非如此。

我到底做错了什么?

最佳答案

GAC 中不应该有程序集的要求,除非应用程序/库的开发人员如此设计。您可以选择编写您的应用程序,以便大多数(如果不是全部)引用的程序集从指定的(公共(public)文件)位置加载。

这是一个示例架构,它实现了本回复底部引用的 MSDN 文章中描述的技术。

示例:在 SOA 应用程序中,您可能有几个不同的 (Windows) 服务。服务可以在多个服务器之间进行负载平衡。在每个服务器中,服务可以安装在“服务”目录下。位于“服务”目录中的服务可以共享来自(公共(public)文件)“lib”目录的程序集:

\CompanyName
      \Services
           \Service1
           \Service2
           \Service3
      \lib

每个实际服务都将派生自一个使用程序集实用程序的基础服务类。您的程序集实用程序可以配置为以系统的方式搜索程序集,从而允许您使用共享/公共(public)程序集。巧妙的是,您的应用程序可以使用本地程序集(在本地开发中)运行,但在部署时使用共享程序集。

在我的真实示例中,我有幸拥有自定义构建和部署脚本。想一想您可以部署 N 项服务中的一项的不同场景。你总是更新(公共(public)文件)'lib'目录吗?服务能否使用不同于“lib”程序集的本地程序集运行?等等

希望对您有所帮助。如果您的问题是让第三方安装程序正确部署您的应用程序,请忽略并命名安装程序。否则,给定的示例/解决方案应该有所帮助 :o)

阅读 MSDN 上的主题:


PS:我在为 Microsoft 的 Unity 框架解决程序集时遇到了挑战。

关于c# - 如何在不破坏应用程序引用的情况下从部署项目中重新定位程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4577004/

相关文章:

c# - 如何在 EF Core 中使用 C# 9 记录?

c# - 如何确定 C# 中当前聚焦进程的名称

WCF RIA Silverlight 部署问题

security - 如何通过 Web Deploy 服务保护 TeamCity 部署?

ruby - 在 Windows 7 上构建 ruby

c# - 有没有一种方法可以更有效或更快地在 excel 文件中写入大型数据表?

c# - 在 WP7 中使用 Facebook.dll 发布到 Facebook 用户墙

java - EL 在 glassfish 上的部署问题

c# - 如何限制安装包上的安装数量

mysql - 使用 HomeBrew 安装 MySQL