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

Team Foundation Server 2013 Build Failure / Builds Locally But Not on Server

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

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

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

Build Failure 和 Log 中的一些信息...找不到作为解决方案一部分的 DLL。

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

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

警告 - C:\Builds\MARCL 政府 Reporting\Development\src\DatabaseAccessMonitor\DBAccesMonitor_bll.vb (5): 导入中指定的命名空间或类型 'ESACR.DataSetFilter' 不包含任何 public 成员或无法找到。确保命名空间或类型已定义并包含至少一个 public 成员。确保导入的元素名称不使用任何别名。

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

3>PrepareForBuild:创建目录“obj\Release”。 ResolveAssemblyReferences:主要参考“ESACR”。 3>C:\Program Files (x86)\MSBuild.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5):警告 MSB3245:无法解析此引用。找不到程序集“ESACR”。检查以确保程序集存在于磁盘上。如果您的代码需要此引用,您可能会遇到编译错误。 [C:\Builds\MARCL 政府 Reporting\Development\src\DatabaseAccessMonitor\DatabaseAccessMonitor.vbproj] 搜索路径“{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)。
  2. 将以下对象添加到项目中。
<Target Name="BeforeResolveReferences">
  <CreateProperty Value="relative/or/absolute/path/to/the/references;$(AssemblySearchPaths)">
    <Output TaskParameter="Value" PropertyName="AssemblySearchPaths"/>
  </CreateProperty>
</Target>

参考文献:

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

我的 VS 解决方案有很多项目引用了一个通用的 dll 文件。在几乎所有单个项目的属性中,我都引用了这个通用的 dll 文件。这对于所有其他项目都可以完美地工作/构建,但我遇到问题的项目除外。

那么,一个在本地构建没有问题但不会通过 TFS 构建的项目是怎么回事。最后看了一下VS Solution的工程文件,发现这个单独的Project虽然在Project属性中指定了,但实际上并没有对公共DLL的引用。

一口气添加了参考...有效。