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