Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
TFSBuild/MSBuild和项目引用与文件引用_Tfs_Msbuild_Projects And Solutions_Tfsbuild_Project Reference - Fatal编程技术网

TFSBuild/MSBuild和项目引用与文件引用

TFSBuild/MSBuild和项目引用与文件引用,tfs,msbuild,projects-and-solutions,tfsbuild,project-reference,Tfs,Msbuild,Projects And Solutions,Tfsbuild,Project Reference,我们有一个使用项目引用的大型VS解决方案,该解决方案由TFS构建,如下所示: Solution - Project 1 - Project 2 - Project ... - Project N 由于解决方案太大,我们每天都会使用几个较小的解决方案: SubSolution - Project 1 - Project 19 问题是,开发人员在使用子解决方案时发现它没有生成,因为找不到项目引用,所以他们将项目更改为使用文件引用 然后,这会破坏TFS构建,TFS构建找不到这些文件引用,因为它们尚

我们有一个使用项目引用的大型VS解决方案,该解决方案由TFS构建,如下所示:

Solution
- Project 1
- Project 2
- Project ...
- Project N
由于解决方案太大,我们每天都会使用几个较小的解决方案:

SubSolution
- Project 1
- Project 19
问题是,开发人员在使用子解决方案时发现它没有生成,因为找不到项目引用,所以他们将项目更改为使用文件引用

然后,这会破坏TFS构建,TFS构建找不到这些文件引用,因为它们尚未构建(即使项目位于同一解决方案中)。有没有办法绕过这两种类型的引用之间的拔河。分解解决方案的正确方法是什么

分解解决方案的正确方法是什么

查看模式与实践团队提供的TFS指南中的本章:

请特别注意“分区解决方案”场景(我相信您实际上正在尝试实现此场景):

与Visual Studio的早期版本不同,Visual Studio 2005依赖于MSBuild。现在可以创建不包含所有引用项目的解决方案结构,并且仍然可以生成没有错误的解决方案结构。只要首先生成主解决方案,并从每个项目生成二进制输出,MSBuild就能够在解决方案的边界之外跟踪项目引用并成功生成。这仅在使用项目引用而不是文件引用时有效。您可以通过VisualStudio build命令行和IDE成功构建以这种方式创建的解决方案,但默认情况下不能使用Team build。为了使用TeamBuild成功构建,请使用包含所有项目和依赖项的主解决方案


无论您如何组织构建,开发人员都应该了解引用是如何工作的,并且在对引用进行更改时要注意,除非他们打算对构建过程进行更改,否则不应在中检查这些更改

关于组织构建的主题——正如Dmytrol所说,项目引用应该在解决方案之间起作用(只要目标已经构建,但文件引用也是如此)


我的建议是将您的项目分组为小型可行的解决方案,并在这些解决方案中使用项目引用。您的主解决方案文件/构建也可以使用项目引用,但是,如果您发现较小解决方案之间的项目引用难以维护,则可以使用文件引用,并通过项目依赖项或项目构建顺序控制构建顺序(在Visual Studio中,可通过右键单击解决方案中的项目进行访问)。

也许您可以尝试为正在生成的主项目上的子项目添加依赖项(DependsOn)?