我们正在尝试让Team Foundation Server 2017自动化构建,到目前为止我们一直只使用Visual Studio来构建和发布,但是现在让Team Foundation Server执行此操作我们遇到了循环依赖的问题。 / p>
我们正在使用Visual Studio构建步骤。
解决方案中有多个项目(.sln)。
该项目引发了对其他两个项目的引用,这些项目没有直接或间接引用该项目。
我一直在寻找一篇描述如何追踪这个循环引用的文章,但到目前为止我发现的所有内容都是关于MSBuild的,或者它是否存在目标“发布”或“Build”以外的问题。< / p>
错误:
[错误] d:\ VS2017 \的MSBuild \微软\ VisualStudio的\ V15.0 \网络\ Microsoft.Web.Publishing.targets(1279,11):
错误MSB4006:目标依赖项中存在循环依赖关系 涉及目标“Build”的图表。
项目“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 \微软\ VisualStudio的\ V15.0 \网络\ Microsoft.Web.Publishing.targets(1279,11): 错误MSB4006:目标依赖项中存在循环依赖项 涉及目标“Build”的图表。
[d:\代理\ 2.112.0_work \ 2 \ S \ SLNNAME \库存\ Inventory.csproj]
完成建筑项目 “d:\代理\ 2.112.0_work \ 2 \ S \ SLNNAME \库存\ 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>
答案 0 :(得分:1)
这个错误发生在:
这些依赖项是您在解决方案资源管理器中右键单击项目,选择“项目依赖项”并开始检查项目后将获得的依赖项。这通常是不必要的,因为可以从参考资料中推断出项目依赖关系。 解决方法是在您喜欢的文本编辑器中打开 SLN 文件,然后搜索如下部分:
Project("{AAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyProjectName", "MyProjectName\MyProjectName.csproj", "{B10E1FCF-DFBA-44A8-830F-6F3B54DFBC}"
ProjectSection(ProjectDependencies) = postProject
{B9E9F8CE-A607-4A6C-97F7-2BD439122F89} = {B9E9F8CE-A607-4A6C-97F7-2BD439122F89}
EndProjectSection
结束项目
只需删除整个部分,您的 Project 节点将如下所示:
Project("{AAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyProjectName", "MyProjectName\MyProjectName.csproj", "{B10E1FCF-DFBA-44A8-830F-6F3B54DFBC}"
结束项目
现在您应该可以成功使用 MSBuild。
答案 1 :(得分:0)
我遇到了同样的问题。
这对我有帮助:
https://community.embarcadero.com/blogs/entry/how-to-fix-msbuild-error-msb4006-38787
我已经在最后一次签入的情况下向项目添加了后生成版本,并且以某种方式,项目依赖项也添加到了.sln中。
它在VS中构建良好,但在TFS构建中却没有。
我只是撤消了对解决方案的最后更改(请参阅链接,删除新的依赖项组)。
ProjectSection(ProjectDependencies) = postProject
{9D6D8692-16DD-452C-9D08-1498B3D51A9F} = {9D6D8692-16DD-452C-9D08-1498B3D51A9F}
{9BE28BBA-B3F6-4076-B989-3B1B48DACF38} = {9BE28BBA-B3F6-4076-B989-3B1B48DACF38}
EndProjectSection
不知道这是否可以解决您的问题,在谷歌搜索过程中,我发现许多类似的问题,其原因/解决方案都不同。