我有一个包含6个项目的Visual Studio 2017解决方案。每个项目都使用几个NuGet包,它们在解决方案中得到了适当的整合。该解决方案在本地成功构建(调试和发布),如果我删除它们将恢复所有NuGet包没有问题。
在将整个解决方案签入TFS并使用默认流程模板(TfvcTemplate.12.xaml)配置构建(Release | Any CPU)之后,我将新构建队列。第一个项目的构建失败,因为找不到库(System.Linq.Dynamic)。构建服务器上的packages文件夹中缺少NuGet包。
在解决方案使用的32个NuGet软件包中,构建服务器上的源文件夹中缺少6个软件包,我无法确定缺少这些软件包的原因。
我有另一个非常类似于这个的解决方案,并使用大多数相同的NuGet包,工作正常。有问题的项目是一个实用项目,几乎完全相同。构建该解决方案时,所有包都会恢复,并且构建工作正常。
我已按照上面列出的步骤允许在我之前找到并使用的TFS构建期间自动恢复NuGet包(即删除NuGet.targets和NuGet.exe;将NuGet.Config更改为将disableSourceControlIntegration设置为true;并从所有项目文件中删除3个NuGet相关标记。正如我所提到的,这在我拥有的其他解决方案中运行良好。
我可以在两个解决方案中想到的唯一区别是工作的一个是在VS 2015中创建的,而新的一个是在VS 2017中创建的。我已经比较了项目文件,唯一真正的区别是某些NuGet包的版本,因为已应用更新。但是,有问题的包是相同的版本,引用是相同的。
我不确定TFS服务器上是否有任何调试日志或其他有用信息可能提供有关正在执行的程序包还原的更详细信息。如果有人知道在哪里寻找,我很乐意提供信息。
非常感谢任何帮助或建议。
我使用/ flp运行构建:verbosity =" diagnostic"并在日志文件中引用System.Linq.Dynamic,以构建有效的解决方案:
主要参考" System.Linq.Dynamic,Version = 1.0.6132.35681,Culture = neutral,PublicKeyToken = null"。 (TASKID:25) 已解决的文件路径为" D:\ Builds - Agent 1 \ PRI.InsuranceCollection \ PRI.InsuranceCollection - Release \ src \ PRI \ PRI.InsuranceCollection \ Mainline \ packages \ System.Linq.Dynamic.1.0.7 \ lib \ net40 \ System.Linq.Dynamic.dll&#34 ;. (TASKID:25) 在搜索路径位置找到参考" {HintPathFromItem}"。 (TASKID:25) 此参考的ImageRuntimeVersion是" v4.0.30319"。 (TASKID:25)
以下是日志文件中用于构建失败的解决方案的参考: 主要参考" System.Linq.Dynamic,Version = 1.0.6132.35681,Culture = neutral,processorArchitecture = MSIL"。 (TASKID:8) 14:51:56.195 5> C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ amd64 \ Microsoft.Common.CurrentVersion.targets(1635,5):警告MSB3245:无法解析此引用。无法找到程序集" System.Linq.Dynamic,Version = 1.0.6132.35681,Culture = neutral,processorArchitecture = MSIL"。检查以确保磁盘上存在程序集。如果您的代码需要此引用,则可能会出现编译错误。 [D:\ Builds - Agent 2 \ MASC.BusinessLicense \ MASC.BusinessLicense \ src \ MASC.BusinessLicense \ Mainline \ VC3.MVC.Util \ VC3.MVC.Util.csproj] 对于SearchPath" {HintPathFromItem}"。 (TASKID:8) 考虑了" .. \ packages \ System.Linq.Dynamic.1.0.7 \ lib \ net40 \ System.Linq.Dynamic.dll",但它并不存在。 (TASKID:8) 对于SearchPath" {Registry:Software \ Microsoft.NETFramework,v4.6.1,AssemblyFoldersEx}"。 (TASKID:8) 考虑AssemblyFoldersEx位置。 (TASKID:8) 对于SearchPath" {GAC}"。 (TASKID:8) 考虑" System.Linq.Dynamic,Version = 1.0.6132.35681,Culture = neutral,processorArchitecture = MSIL",这是在GAC中找不到的。 (TASKID:8) 对于SearchPath" {RawFileName}"。 (TASKID:8) 考虑处理" System.Linq.Dynamic,Version = 1.0.6132.35681,Culture = neutral,processorArchitecture = MSIL"作为文件名,但它不存在。 (TASKID:8) 对于SearchPath" D:\ Builds - Agent 2 \ MASC.BusinessLicense \ MASC.BusinessLicense \ bin \"。 (TASKID:8) 考虑" D:\ Builds - Agent 2 \ MASC.BusinessLicense \ MASC.BusinessLicense \ bin \ System.Linq.Dynamic.winmd",但它并不存在。 (TASKID:8) 考虑过" D:\ Builds - Agent 2 \ MASC.BusinessLicense \ MASC.BusinessLicense \ bin \ System.Linq.Dynamic.dll",但它并不存在。 (TASKID:8) 考虑" D:\ Builds - Agent 2 \ MASC.BusinessLicense \ MASC.BusinessLicense \ bin \ System.Linq.Dynamic.exe",但它并不存在。 (TASKID:8)
我没有看到任何日志文件中正在恢复的NuGet包的明确引用。在构建期间有几个对环境的引用,并且 EnableNuGetPackageRestore = true 出现在每个引用中。