Team Foundation Server 2013 构建失败/在本地构建但不在服务器上

Posted

技术标签:

【中文标题】Team Foundation Server 2013 构建失败/在本地构建但不在服务器上【英文标题】:Team Foundation Server 2013 Build Failure / Builds Locally But Not on Server 【发布时间】:2021-06-03 17:15:24 【问题描述】:

多年来,我一直在使用 TFS 2013。我没有对服务器进行任何更改。我最近在我的解决方案中添加了一个项目。 (VS-2103 更新五)当我更新项目时,我运行本地构建没有问题。在 Dev 中测试了代码,一切都很好。但是,当我在 TFS 中运行构建时,我继续收到构建失败。如果我从解决方案中删除该项目,我可以毫无问题地在 TFS 中运行构建。我已删除/重新创建项目,重命名它,重新创建构建定义,重新启动两端。当我引用作为解决方案一部分的 DLL 时,它被挂断了。我拉出那个参考,我可以通过 TFS 构建没有问题。另请注意,解决方案中的其他 30 个左右项目引用了相同的 DLL 和相同的类,没有问题。只是我添加的这个项目。但它是在本地构建的???

这适用于在自己的服务器上的数据中心中运行的非常旧的应用程序。 TFS 在自己的服务器上运行。不涉及云。我几乎是一个几乎端到端的人。所有源代码都在我的工作站上。更改将传递到创建最终构建的 TFS 服务器。我一年前安装了 TFS……它运行了好几年直到……

希望有人能给我一个线索...

构建失败和日志中的一些信息...找不到解决方案中的 DLL。

错误消息 - C:\Builds\1\MARCL Government Reporting\Development\src\DatabaseAccessMonitor\DBAccesMonitor_bll.vb (8):未定义类型“ESACR.GeneralMailer_bll”。

警告 - C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets (1697):无法解析此引用。找不到程序集“ESACR”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,则可能会出现编译错误。

警告 - C:\Builds\1\MARCL Government Reporting\Development\src\DatabaseAccessMonitor\DBAccesMonitor_bll.vb (5):在 Imports 'ESACR.DataSetFilter' 中指定的命名空间或类型不包含任何公共成员或不能被发现。确保命名空间或类型已定义并包含至少一个公共成员。确保导入的元素名称不使用任何别名。

您可以看到的部分日志似乎找不到 ESACR.dll...

3>PrepareForBuild:创建目录“obj\Release”。 ResolveAssemblyReferences:主要参考“ESACR”。 3>C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5):警告 MSB3245:无法解析此引用。找不到程序集“ESACR”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,您可能会遇到编译错误。 [C:\Builds\1\MARCL Government Reporting\Development\src\DatabaseAccessMonitor\DatabaseAccessMonitor.vbproj] 对于 SearchPath“HintPathFromItem”。考虑“..\ESACR\bin\Release\ESACR.dll”,但它不存在。对于 SearchPath“TargetFrameworkDirectory”。考虑“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\ESACR.winmd”,但它不存在。考虑“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\ESACR.dll”,但它不存在。考虑为“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\ESACR.exe”,但它不存在。

【问题讨论】:

【参考方案1】:

请尝试以下方法,看看能否解决问题:

    打开项目文件(在您的情况下应该是 .vbproj)。 将以下对象添加到项目中。
<Target Name="BeforeResolveReferences">
  <CreateProperty Value="relative/or/absolute/path/to/the/references;$(AssemblySearchPaths)">
    <Output TaskParameter="Value" PropertyName="AssemblySearchPaths"/>
  </CreateProperty>
</Target>

文章作为参考:

Walkthrough: Use MSBuild [Solution] MSBUILD Could not locate assembly using AssemblySearchPaths in csproj files

【讨论】:

感谢您的评论...它帮助我提示了在哪里寻找东西。我最终发现问题是 VS 解决方案项目文件中缺少引用。 嗨@JTS2045,很高兴问题已经解决。如果我的回答对您有帮助,您可以标记为该主题的解决方案。这对于正在寻找类似问题的解决方案的其他人也可能非常有帮助。谢谢。【参考方案2】:

经过很多很长时间后,我发现了问题。这是交易。我正在运行 VS-2013 IDE,它与 TFS 2013 Update 5 配合使用。没有云... 是的,它已经很老了,但是当它真的对企业的内部运营没有任何作用时,大公司对更新到最新的东西并不真正感兴趣。而且,他们也让我很忙。

我的 VS 解决方案有许多引用通用 dll 文件的项目。在几乎所有单个项目的属性中,我都引用了这个通用 dll 文件。这对所有其他项目都有效/构建完美,但我遇到了麻烦。

那么,一个可以毫无问题地在本地构建但不会通过 TFS 构建的项目是怎么回事。最后我查看了 VS 解决方案项目文件,发现这个单独的项目实际上并没有对公共 DLL 的引用,即使它是在项目属性中指定的。

在爆炸中添加了引用...它有效。

【讨论】:

您好@JTS2045,感谢您分享您的经验。请将您的答案标记为该主题的解决方案。非常感谢。

以上是关于Team Foundation Server 2013 构建失败/在本地构建但不在服务器上的主要内容,如果未能解决你的问题,请参考以下文章

使用 Team Foundation Server 中的 Team Foundation 版本控制将分支的最新版本合并到其根目录

Team Foundation Server 2017 安装

Visual Studio 6 (VC6)连接Team Foundation Server (TFS 2018),实现源代码的版本管理

text Team Foundation Server 2015中的敏捷项目管理

无法连接到Team Foundation Server

TF400324: Team Foundation services are not available from server…