【问题标题】:MsBuild: Changing References from ProjectReference to ReferenceMsBuild:将引用从 ProjectReference 更改为 Reference
【发布时间】:2010-08-20 13:18:21
【问题描述】:

在我们的环境中,我们有两个内部框架和一个单独的网站。在开发过程中,对内部框架的引用往往被设置为项目引用。但是,一旦我们开始发布,内部框架就会安装到 GAC 中,因为它们用于每个服务器上的多个网站实例。所有的 ProjectReferences 都被手动更改为 References,并且网站程序集和网站被重新编译和部署。

我正在尝试自动化这个过程。处理这些问题的最佳方法是什么?我已经开始学习 MsBuild 以尝试实现这一目标,但我完全感到困惑。有关如何进行的任何指示和/或建议?

【问题讨论】:

    标签: msbuild msbuild-4.0


    【解决方案1】:

    据我所知,不应该仅仅因为程序集已在 GAC 中注册而从使用项目引用更改为文件引用 - 只要引用的项目在它所在的点是强类型的构建后,引用应该仍然有效。

    澄清:

    GAC 引用和文件引用之间没有根本区别 - 如果您有对强命名程序集的引用,并且该程序集放置在 GAC 中,那么最终应用程序将从 GAC 加载该程序集。

    有关运行时如何定位引用的程序集的更多信息,请参阅此链接:

    仅供参考 - 我认为建议您不要引用物理上位于 GAC 中的程序集,而是在将其放入 GAC 之前引用强命名程序集(而不是与是否应将程序集安装到最终用户计算机上的 GAC 混淆)

    【讨论】:

    • 实际上,我不想要文件引用 - 我想要 GAC 引用。这是由于我们的设置项目的工作方式 - 它仅将项目安装到 GAC 中。
    • @David - 我不明白您所说的“GAC 引用”是什么意思,我认为您的意思是您打算安装到 GAC 的引用强命名程序集?如果是这种情况,那么“GAC 参考”和文件参考之间没有根本区别。
    【解决方案2】:

    如果您保留项目引用,MSBUILD 会将所有项目引用作为 DLL 复制到目标网站的 bin 目录中,即使您已将这些 DLL 安装到 GAC 中,我认为这就是您想要在发布级别——这样可以节省空间。

    我还假设您打算只在发布分支执行此操作,而不是在源代码管理的开发分支执行此操作。因为如果您在源代码控制的所有分支中都这样做,那么手工操作实际上是一次性更改的最佳和最快的方法。

    要在 MSBUILD 中执行此操作,您需要创建一个可以修改项目文件的自定义任务。项目文件是一个 XML 文件,因此您可以在 MSBUILD 中使用 XPath 作为您的自定义任务。在项目文件中,您将找到引用项目的“”标签。您需要将它们更改为“”标签。使用项目中现有的标签示例来查看它的外观

    抱歉,我没有用于此的示例代码 - 这样做会有点麻烦,因为需要考虑很多事情,并且最终可能不可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多