在我们的环境中,我们有两个内部框架和一个单独的网站。在开发过程中,对内部框架的引用倾向于设置项目引用。但是,一旦我们转向发布,内部框架就会安装到GAC中,因为它们用于每个服务器上的多个网站实例。所有ProjectReferences都手动更改为引用,并重新编译和部署网站程序集和网站。
我正在尝试自动执行此过程。处理这些问题的最佳方法是什么?我已经开始学习MsBuild以实现这一目标,但我完全感到困惑。关于如何进行的任何指示和/或建议?
答案 0 :(得分:3)
据我所知,不应该只需要将项目引用更改为文件引用,因为程序集已在GAC中注册 - 只要引用的项目是强类型的,它就是建成后,引用应该仍然有效。
<强>澄清:强>
GAC引用和文件引用之间没有根本区别 - 如果您引用了强名称程序集,并且该程序集放在GAC中,那么最终应用程序将从GAC加载该程序集。
有关运行时如何查找引用的程序集的更多信息,请参阅此链接:
仅供参考 - 我认为建议您不引用GAC中物理上的程序集,并在将其放入GAC之前引用强名称程序集(不是与组装是否应该安装到最终用户机器上的GAC相混淆)
答案 1 :(得分:1)
如果您保留项目引用,MSBUILD会将所有项目引用作为DLL复制到目标网站的bin目录中,即使您已将这些DLL安装到GAC中,我认为这是为什么要在发布级别 - 以便节省空间。
我还假设您打算仅在Release Branch执行此操作,而不是在源代码管理的开发分支执行此操作。因为如果您在源代码控制的所有分支中执行此操作,那么手动执行实际上是一次性更改的最佳和最快方式。
要在MSBUILD中执行此操作,您需要创建可以修改项目文件的自定义任务。项目文件是XML文件,因此您可以使用XPath作为MSBUILD中的自定义任务。在项目文件中,您将找到引用项目的“”标签。您需要将这些标记更改为“”标记。使用项目中标记的现有示例来查看它应该如何显示
抱歉,我没有这方面的示例代码 - 这样做会有点意义,因为会有很多事情要考虑,最终可能不可行。< / p>