我正在使用许多控制台应用程序,并且所有这些应用程序都使用共享项目。 TFS中的分支看起来像这样:
-branchname
--scripts
--sharedlib
--applications
--application1
--application2 etc.
有数百个应用程序都在 sharedlib 中引用该项目。我们并未从中引用 .dll ,因为某些应用程序团队希望自定义共享项目。
因此,要使所有应用程序正常工作,我已将TFS分支映射到本地并打开解决方案并添加现有项目并添加共享项目 .csproj 作为参考< em>(在Visual Studio 2015中)。 我可以在我的应用程序的 .sln 和 .csproj 文件中看到对共享项目的引用,如下所示:
..\..\sharedlib\commonproject\commonproject.csproj
意味着它从应用程序解决方案文件夹中升级两级,找到 sharedlib 文件夹,然后找到 .csproj 文件。它在当地工作正常。
但是当我在 TFS 2015 中为应用程序创建构建定义时,一切都爆发了。由于TFS构建&#34;获取来源&#34; 步骤将 sharedlib 文件夹作为存储库映射中的 .sln 文件夹级别TFS适用于应用程序文件夹和 sharedlib 文件夹到 $(build.sourcesDirectory)和 $(build.sorcesDirectory)分别是\ sharedlib 路径。因此,当它查看 .sln 文件并尝试向上两级找到共享项目 .csproj 文件时,它根本无法做到因为在构建服务器中,公共 .csproj 文件位于从 .sln 文件复制到的位置的一个级别:
(sharedlib\commonproject\commonproject.csproj)
因此,如果我编辑.sln和.csproj文件以删除两个级别的路径并简单地将其设置为(sharedlib\commonproject\commonproject.csproj)
,那么它将构建在服务器上,但是甚至不会加载到本地因为路径在本地变得不正确。所以我似乎无法在本地和TFS服务器上运行它。
有什么方法可以解决这个问题吗?
我能想到的一个可能的解决方案是在开始构建之前在构建服务器中将共享项目复制两级,并将路径保留在 .sln 和 .csproj < / em>未触动过。但是我如何在TFS中设计这一步呢?
非常感谢任何类型的解决方案。
谢谢
答案 0 :(得分:0)
&#34;一些应用程序团队希望自定义共享项目。&#34;他们还可以根据共享项目生成多个版本的dll,并使用Nuget来管理/导入他们需要的版本。
如果您的团队坚持使用项目引用而不是dll引用。建议您使用相对路径引用而不是使用绝对路径。
由于它距应用程序解决方案文件夹两级,因此您可以尝试使用
$(SolutionDir)\sharedlib\commonproject\commonproject.csproj
答案 1 :(得分:0)
您可以在构建定义中的Build Agent Folder上配置项目的本地路径。我更喜欢的简单方法是在构建定义中将应用程序项目的路径设置为两级,如下所示,然后相应地更新VS Build步骤中的路径:
Application: $(build.sourcesDirectory)\app\app
Sharedlib: $(build.sorcesDirectory)\sharedlib