Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MsBuild:将引用从ProjectReference更改为引用_Msbuild_Msbuild 4.0 - Fatal编程技术网

MsBuild:将引用从ProjectReference更改为引用

MsBuild:将引用从ProjectReference更改为引用,msbuild,msbuild-4.0,Msbuild,Msbuild 4.0,在我们的环境中,我们有两个内部框架和一个单独的网站。在开发过程中,对内部框架的引用往往设置为tp项目引用。然而,一旦我们开始发布,内部框架将安装到GAC中,因为它们用于每台服务器上的多个网站实例。所有ProjectReference都手动更改为Reference,并且重新编译和部署网站程序集和网站 我正在尝试自动化这个过程。处理这些问题的最佳方式是什么?为了实现这一点,我开始学习MsBuild,但我完全感到困惑。关于如何继续的任何指针和/或建议?据我所知,不应该仅仅因为程序集已在GAC中注册而从

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


我正在尝试自动化这个过程。处理这些问题的最佳方式是什么?为了实现这一点,我开始学习MsBuild,但我完全感到困惑。关于如何继续的任何指针和/或建议?

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

澄清:

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

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


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

如果您将项目引用保留在中,MSBUILD将把所有项目引用作为DLL复制到目标网站的bin目录中,即使您已将这些DLL安装到GAC中,我认为这就是您希望在发布级别更改此项的原因,以便节省空间

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

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


很抱歉,我没有这方面的示例代码——这样做会有点困难,因为需要考虑很多事情,最终可能不可行。

实际上,我不想要文件引用-我想要GAC引用。这是因为我们的安装项目的工作方式-它只将项目安装到GAC中。@David-我不明白您所说的“GAC引用”是什么意思,我认为您是指您打算安装到GAC的强名称程序集的引用?如果是这种情况,“GAC引用”和文件引用之间没有根本区别。