TFS Build 2013 - 无法解析主要参考
TFS Build 2013 - Cannot resolve primary reference
我正在评估 TFS Build 2013 在公司环境中的使用情况。
TF 本身 运行 多年来一直很好,今天我设置了构建组件。目前没问题。
我从源代码中抓取了一个相当简单的项目,并使用标准默认值创建了一个手动触发的构建定义。
我 运行 进行了测试构建,并通过主要参考直接解决了问题。日志中的错误是:
C:\Program Files (x86)\MSBuild.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 文件我可以看到 link 存储为“..\References\XYZ.dll”等。这对于本地构建工作正常,没有人遇到过问题。参考文件夹被签入 TFS,每个人都得到一份副本。从我通过尝试诊断我们的问题所读到的内容来看,这是一种相当普遍且被接受的管理参考的方式.
因此,我收到的构建错误如上所示。基本上是说构建目标无法从 References 文件夹中找到 DLL。日志继续列出它试图找到它的所有地方。
最重要的是(看起来)第一行是:
For SearchPath "{HintPathFromItem}".
Considered "..\References\XYZ.dll", but it didn't exist.
此外,它还会在 Framework 文件夹、各种默认程序集文件夹、GAC 等中查找,none 其中(当然)包含它。
所以我想知道我哪里出错了。我是否错误配置了 build/drop 个位置之一?是否有其他一些约定来引用所需的 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\ClientName\SolutionName\src\Dev\Evolution\Source\SolutionName.Solution\References
如果我打开 VS2013 命令提示符,导航到包含 .sln 文件(以及 References 文件夹)和 运行 "msbuild d:\path\to\Solution.sln" 的文件夹,然后它会成功构建,没有警告或错误。
好吧,事实证明这根本不是 TFS 的错...
有问题的 DLL 虽然存在于 References 文件夹中,但实际上并未签入 TFS。
右键单击 VS 中的引用文件夹(添加为 "Solution Folder")并选择添加现有项,然后签入解决了问题。
因此,References 文件夹的使用方式与您预期的一样,与 VS 使用它的方式相同。 MSBuild 在本地工作,因为我的本地文件夹中有该文件,但因为它不是解决方案的一部分,所以它不在源的其余部分。
我正在评估 TFS Build 2013 在公司环境中的使用情况。 TF 本身 运行 多年来一直很好,今天我设置了构建组件。目前没问题。
我从源代码中抓取了一个相当简单的项目,并使用标准默认值创建了一个手动触发的构建定义。
我 运行 进行了测试构建,并通过主要参考直接解决了问题。日志中的错误是:
C:\Program Files (x86)\MSBuild.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 文件我可以看到 link 存储为“..\References\XYZ.dll”等。这对于本地构建工作正常,没有人遇到过问题。参考文件夹被签入 TFS,每个人都得到一份副本。从我通过尝试诊断我们的问题所读到的内容来看,这是一种相当普遍且被接受的管理参考的方式.
因此,我收到的构建错误如上所示。基本上是说构建目标无法从 References 文件夹中找到 DLL。日志继续列出它试图找到它的所有地方。
最重要的是(看起来)第一行是:
For SearchPath "{HintPathFromItem}". Considered "..\References\XYZ.dll", but it didn't exist.
此外,它还会在 Framework 文件夹、各种默认程序集文件夹、GAC 等中查找,none 其中(当然)包含它。
所以我想知道我哪里出错了。我是否错误配置了 build/drop 个位置之一?是否有其他一些约定来引用所需的 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\ClientName\SolutionName\src\Dev\Evolution\Source\SolutionName.Solution\References
如果我打开 VS2013 命令提示符,导航到包含 .sln 文件(以及 References 文件夹)和 运行 "msbuild d:\path\to\Solution.sln" 的文件夹,然后它会成功构建,没有警告或错误。
好吧,事实证明这根本不是 TFS 的错...
有问题的 DLL 虽然存在于 References 文件夹中,但实际上并未签入 TFS。
右键单击 VS 中的引用文件夹(添加为 "Solution Folder")并选择添加现有项,然后签入解决了问题。
因此,References 文件夹的使用方式与您预期的一样,与 VS 使用它的方式相同。 MSBuild 在本地工作,因为我的本地文件夹中有该文件,但因为它不是解决方案的一部分,所以它不在源的其余部分。