【发布时间】:2017-09-13 10:33:10
【问题描述】:
我们正在尝试让 Team Foundation Server 2017 自动生成构建,到目前为止,我们一直只使用 Visual Studio 来构建和发布,但现在让 Team Foundation Server 执行此操作,我们遇到了循环依赖问题。
我们正在使用 Visual Studio 构建步骤。
解决方案中有多个项目 (.sln)。
该项目因引用了另外两个没有直接或间接引用该项目的项目而崩溃。
我已经翻遍了一篇描述如何追踪此循环引用的文章,但到目前为止我发现的所有内容都在谈论 MSBuild,或者它与目标“发布”或“构建”以外的其他东西有问题。
错误:
[错误]D:\VS2017\MSBuild\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.targets(1279,11):
错误 MSB4006:目标依赖中存在循环依赖 涉及目标“构建”的图表。
项目 "D:\Agent\2.112.0_work\2\s\SLNNAME\SLNNAME.sln" (1) 是 建筑 "D:\Agent\2.112.0_work\2\s\SLNNAME\Inventory\Inventory.csproj" (17) 在节点 1(默认目标)上。
D:\VS2017\MSBuild\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.targets(1279,11): 错误MSB4006:目标依赖中存在循环依赖 涉及目标“构建”的图表。
[D:\Agent\2.112.0_work\2\s\SLNNAME\Inventory\Inventory.csproj]
完成建筑项目 "D:\Agent\2.112.0_work\2\s\SLNNAME\Inventory\Inventory.csproj" (默认目标)--失败。
完成构建项目“D:\Agent\2.112.0_work\2\s\SLNNAME\SLNNAME.sln” (默认目标)--失败。
构建失败。
这是我在 .sln 文件中的构建目标:
<Target Name="OverrideAppConfigWithTargetPath">
<ItemGroup>
<AppConfigWithTargetPath Remove="@(AppConfigWithTargetPath)" />
<AppConfigWithTargetPath Include="$(TransformedConfig)" Condition="'$(TransformedConfig)'!=''">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
<Target Name="CopyTransformedConfig" Condition="'$(TargetName)' != ''">
<Copy Condition="Exists('$(TransformedConfig)')" SourceFiles="$(TransformedConfig)" DestinationFiles="$(OutputPath)$(TargetName)$(TargetExt).config" />
<Copy Condition="Exists('$(TransformedConfig)') And '$(TargetExt)' == '.exe'" SourceFiles="$(TransformedConfig)" DestinationFiles="$(OutputPath)$(TargetName).vshost.exe.config" />
</Target>
<Target Name="AfterPublish">
<PropertyGroup>
<DeployedConfig>$(_DeploymentApplicationDir)$(TargetName)$(TargetExt).config$(_DeploymentFileMappingExtension)</DeployedConfig>
</PropertyGroup>
<Copy Condition="Exists('$(DeployedConfig)')" SourceFiles="$(TransformedConfig)" DestinationFiles="$(DeployedConfig)" />
</Target>
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
</Target>
【问题讨论】:
-
这个解决方案可以在你本地的Visual Studio中成功构建吗?您可以分享一个解决方案示例来重现您的问题吗?或者你能解释一下“它引爆的项目引用了另外两个没有直接或间接引用这个项目的项目。”
-
是的,它在 Visual Studio 中构建良好,但不使用 TFS Visual Studio 构建任务。我上面评论的意思是项目 1 引用了项目 2 和项目 3,但他们都没有添加对项目 1 的引用。我不确定如何创建您要求的示例,这些都是很多的一部分更大的 sln,我无法分享...
-
你能把 3 个项目的 .csproj 文件分享给我,让我检查一下。您可以将它们上传到here。
-
好的,我添加了一个带有这三个文件的 zip 文件作为 .txt 文件。 INV_Project 是我在构建时遇到的问题,另外两个是它引用的项目。这两个都被同一个 sln 中的其他几个项目引用,它们都工作正常。我已经编辑了很多,所以如果您需要任何具体的内容,请告诉我...这是一个驱动器共享链接:1drv.ms/u/s!Aj0zHV10Vai5gZQOg0S2ZARa1YGSTg
-
请在您的构建代理服务器上使用MSBuild命令构建解决方案(D:\Agent\2.112.0_work\2\s\SLNNAME\SLNNAME.sln),错误是否仍然存在?跨度>