我正在评估 TFS Build 2013 在企业环境中的使用情况。 TF 本身已经运行良好多年,今天我设置了构建组件。到目前为止没问题。
我从源代码中抓取了一个相当简单的项目,并使用标准默认值创建了一个手动触发的构建定义。
我运行了一个测试版本并使用主要引用直接解决了一个问题。日志中的错误是:
C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "XYZ.dll".
关于我们如何存储和使用引用的一些背景知识: 我们为解决方案创建一个根文件夹,其中包含项目的 .sln 文件和子目录。然后,我们在此级别添加一个“References”文件夹,其中包含项目所需的所有 DLL。这些通常是来自其他内部代码库的 DLL,但也有某些第 3 方代码库(例如旧的企业库 DLL,以及我们无法从 NuGet 获得的任何其他内容)。
需要这些 DLL 的每个项目都引用此文件夹(通过检查 .proj 文件,我可以看到链接存储为“..\References\XYZ.dll”等。这适用于本地构建,没有人曾经有过问题。引用文件夹被 checkin TFS,每个人都得到一份副本。根据我通过尝试诊断我们的问题所阅读的内容,这是一种相当普遍且被接受的管理引用的方式。
因此,我收到的构建错误如上所示。基本上是说构建目标无法从 References 文件夹中找到 DLL。日志继续列出它试图找到它的所有地方。
最重要的是(看起来)第一行是:
For SearchPath "{HintPathFromItem}". Considered "..\References\XYZ.dll", but it didn't exist.
此外,它还会在 Framework 文件夹、各种默认程序集文件夹、GAC 等中查找,但(当然)没有一个包含它。
所以我想知道我哪里出错了。我是否错误配置了构建/删除位置之一?是否有其他一些约定来引用所需的 DLL(请记住我们整个公司都使用“..\References”文件夹设置,或者是否有其他约定?
我是 TFS Build 的新手,但我绝不是 TFS 或 Visual Studio 的新手 本身。我花了大约一个小时左右的时间进行谷歌搜索,但没有发现任何人遇到与我相同的问题,因此非常感谢任何帮助。
谢谢
更新:
构建代理配置如下:
Build Agent- 工作目录:
D:\BuildAgent\$(BuildAgentId)\$(BuildDefinitionPath)
构建定义“Source Settings”具有(我假设的)默认值:
Status: Active | Source Control Folder: $/ProjectRoot | Build Agent Folder: $(SourceDir)
Status: Cloaked | Source Control Folder: $/ProjectRoot/Drops | Build Agent Folder:
这里没有明确配置引用文件夹,但是当我查看 Build Agent 的工作目录时,我可以看到它:
D:\BuildAgent\1\ClientName\SolutionName\src\Dev\Evolution\Source\SolutionName.Solution\References
如果我打开 VS2013 命令提示符,导航到包含 .sln 文件的文件夹(以及 References 文件夹)并运行“msbuild d:\path\to\Solution.sln”然后它会成功构建,没有警告或错误。
最佳答案
事实证明这根本不是 TFS 的错...
有问题的 DLL 虽然存在于 References 文件夹中,但实际上并未 checkin TFS。
右键单击 VS 中的 References 文件夹(添加为“解决方案文件夹”)并选择添加现有项,然后 checkin 解决了该问题。
因此,References 文件夹的使用方式与您预期的一样,与 VS 使用它的方式相同。 MSBuild 在本地工作,因为我的本地文件夹中有该文件,但因为它不是解决方案的一部分,所以它不在源的其余部分。
关于visual-studio-2013 - TFS Build 2013 - 无法解析主要引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28672419/