繁体   English   中英

在TFS下构建CI队列时未恢复的软件包(VS Online VS2015)

[英]Packages not restored when building on CI queue under TFS (VS Online VS2015)

我问了一个关于构建错误问题,并继续通过我的绝望自我调查问题。

我猜测问题是关于被提取但未正确放置的包。 透过痛苦无聊的日志给我看了这个。

2016-01-15T21:50:40.8680146Z
项目中不存在“C:\\ Program Files(x86)\\ MSBuild \\ Microsoft \\ NuGet \\ Microsoft.NuGet.targets(186,61)”中的BeforeTargets属性中列出的目标“BeforeGenerateProjectPriFile”,将被忽略。

此后不久,我可以看到一些横向走势的第一个迹象。

2016-01-15T21:50:43.9631666Z ## [警告]
C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ Microsoft.Common.CurrentVersion.targets(1819,5):警告MSB3245:无法解析此引用。 无法找到程序集“Microsoft.CodeDom.Providers.DotNetCompilerPlatform,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”。 检查以确保磁盘上存在程序集。 如果您的代码需要此引用,则可能会出现编译错误。
2016-01-15T21:50:43.9631666Z 2>
C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ Microsoft.Common.CurrentVersion.targets(1819,5):警告MSB3245:无法解析此引用。 无法找到程序集“Microsoft.CodeDom.Providers.DotNetCompilerPlatform,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”。 检查以确保磁盘上存在程序集。 如果您的代码需要此引用,则可能会出现编译错误。 [C:\\一个\\ 1 \\ S \\的MyStuff \\ MyStuff.csproj]

然后它继续考虑那些不存在的东西。

2016-01-15T21:50:43.9661661Z
考虑“.. \\ packages \\ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 \\ lib \\ net45 \\ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll”,但它不存在。
2016-01-15T21:50:43.9671655Z
对于SearchPath“{TargetFrameworkDirectory}”。 2016-01-15T21:50:43.9681655Z
考虑“C:\\ Program Files(x86)\\ Reference Assemblies \\ Microsoft \\ Framework.NETFramework \\ v4.5.2 \\ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.winmd”,但它不存在。
...

我不熟悉TFS上的CI和VS Online,所以它很少告诉我在哪里可以解决这个问题。 我用谷歌搜索了一半,并在门户网站上测试了大量不同的设置。 没运气。 我可能会导致其他错误(当我知道我输入了错误的东西等等)但是不管怎么说,我都会转向这个错误。

任何提示将不胜感激。

从版本VS2015开始,不需要NuGet文件夹,这与我见过的指南相反。 实际上,唯一需要的文件是包的配置。 检查包及其可执行文件是常见但非常具有欺骗性的解决方法,但这可能会产生很多问题。 我不建议这样做,因为它隐藏了问题,而不是解决它。

首先,验证您的构建实际上是否还原了包。 我注意到在错误日志中,它看起来如果确实如此,但这是一个陷阱。 这是尝试恢复,而不是实际的成功。 如果你遇到这样的警告(对于nUnit,WebGrease,NewtonSoft或NuGet控制下的任何其他软件包也是如此):

警告MSB3245:无法解析此引用。 无法找到程序集“EntityFramework”。 检查以确保磁盘上存在程序集。

首先验证日志是否包含以下段落:

PrepareForBuild:
创建目录“obj \\ Debug \\”。
...
RestorePackages:
“C:\\ a \\ src \\ src.nuget \\ nuget.exe”安装“C:\\ a \\ src \\ src \\ xxxx.Entities \\ packages.config”
-source -RequireConsent -o“C:\\ a \\ src \\ src \\ packages”
...
已成功安装“EntityFramework 6.3.1”。 ResolveAssemblyReferences:
主要参考“EntityFramework”。

请记住,查看日志文件时,请搜索部分字符串,因为目录,版本,软件包的名称等可能略有不同。 如果找不到,那么很有可能在构建服务器上没有恢复软件包。 本地编译证明环境之间存在差异,很可能文件packages.config不可用。 这是一个棘手的错误,因为失败的日志不会告诉你它丢失了。 事实上,我的日志中根本没有提到它。

  1. 首先,我创建了一个全新的项目Auto并将其签入。构建成功。
  2. 然后,我添加了Entity Framework,并且构建失败并发出与您相同的警告。
  3. 最后,我检查了packages.config文件。 构建成功。

在此输入图像描述

出现此问题是因为初始签入选择了许多要忽略的文件。 主要是binobj等,还有packages.config 需要特别选择它作为不被忽略的。 如果有人检查了所有文件(在我的视图中不是很明智),他也会获得所需的文件,因此看起来好像他们做得对。 请注意,您应该首先将文件添加到版本控制。 这样,它就会在每次更改时签入。 否则,如果您在本地添加新包或更新现有包,问题将重新出现。

如果收到警告但已恢复软件包(日志中列出了行),请尝试在本地更新软件包或重新安装。 最后,您可以通过运行Update-Package -Reinstall从程序包管理器控制台刷新安装。

  • 类似的问题与旧版本的软件包管理器的位置
  • 这里需要检查的文件(自VS 2015以来)的建议不正确。
  • 此处有文件布局的过时描述(对于VS 2013及更早版本有效)。
  • 有关如何在此构建NuGet文件结构的更多信息。
  • 关于这个问题的非常好的博客(奇怪的是它在Google中没有出现在这里)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM