我正在评估TFS Build 2013以便在企业环境中使用。 TF本身运行良好多年,今天我设置了Build组件。到目前为止没问题。
我从源代码中抓取了一个相当简单的项目,并使用标准默认值创建了一个手动触发的构建定义。
我运行了测试版本并立即使用主要参考文章来解决问题。日志中的错误是:
C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ amd64 \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3245:无法解析此引用。无法找到程序集" XYZ.dll"。
关于我们如何存储和使用引用的背景知识如下: 我们为解决方案创建了一个根文件夹,其中包括正常的项目的.sln文件和子目录。然后我们添加一个"参考文献"此级别的文件夹,其中包含项目所需的所有DLL。这些通常是来自其他内部代码库的DLL,但也包括某些第三方DLL(例如旧的Enterprise Library DLL,以及我们不能从NuGet获得的任何其他内容)。
需要这些DLL的每个项目引用此文件夹(并且从检查.proj文件,我可以看到链接存储为" .. \ References \ XYZ.dll"等等。对于本地构建而言,没有人遇到过任何问题。参考文件夹会被检入TFS并且每个人都会得到一份副本。从我读过的内容到尝试诊断我们的问题,这是一种相当普遍和可接受的方式来管理引用
因此,我收到的构建错误如上所述。基本上说构建目标无法从References文件夹中找到DLL。日志继续列出它试图找到它的所有地方。
至关重要(似乎)第一行是:
对于SearchPath" {HintPathFromItem}"。 考虑过" .. \ References \ XYZ.dll",但它并不存在。
此外,它查看Framework文件夹,各种默认程序集文件夹,GAC等,其中没有一个(当然)包含它。
所以我想知道我哪里出错了。我是否错误配置了其中一个构建/放置位置?是否有一些其他约定用于引用所需的DLL(请记住我们整个公司使用" .. \ References"文件夹设置,还是还有别的东西?
我对TFS Build相当新,但我对TFS或Visual Studio来说并不陌生。 本身。我花了大约一个小时左右的谷歌搜索没有发现任何人遇到与我相同的问题,所以任何帮助将不胜感激。
由于
更新
构建代理配置如下:
构建代理工作目录:
d:\ BuildAgent \ $(BuildAgentId)\ $(BuildDefinitionPath)
构建定义"源设置"有(我假设)默认值:
状态:有效|源代码控制文件夹:$ / ProjectRoot |构建代理文件夹:$(SourceDir)
状态:隐形|源代码控制文件夹:$ / ProjectRoot / Drops |构建代理文件夹:
这里没有显式配置references文件夹,但是当我查看Build Agent的工作目录时,我可以看到它:
d:\ BuildAgent \ 1 \ CLIENTNAME \解决方案名称\ SRC \开发\演进\源\ SolutionName.Solution \参考
如果我打开VS2013命令提示符,请导航到包含.sln文件的文件夹(以及References文件夹)并运行" msbuild d:\ path \ to \ Solution.sln"然后它成功构建,没有任何警告或错误。
答案 0 :(得分:1)
事实证明,这根本不是TFS的错误......
有问题的DLL虽然存在于References文件夹中,但实际上并未检入TFS。
右键单击VS中的References文件夹(添加为“解决方案文件夹”)并选择添加现有项目,然后检入以解决问题。
因此,正如您所期望的那样使用References文件夹,就像VS使用它一样。 MSBuild在本地工作,因为我在我的本地文件夹中有文件,但因为它不是解决方案的一部分,所以它不是源代码的其余部分。