TFS在线构建失败 - NuGet包还原无法正常工作

时间:2014-11-14 03:24:08

标签: tfs build msbuild entity-framework-6

我很乐意帮助您解决此问题。代码在本地框中编译,但是对于项目说 -

,TFS构建失败

Entity \ DbModel.Context.cs(16):类型或命名空间名称'实体'名称空间中不存在System.Data' (你错过了一个程序集引用吗?)

Entity \ DbModel.Context.cs(19):类型或命名空间名称' DbContext'找不到(你错过了使用指令或汇编引用吗?)

Entity \ DbModel.Context.cs(26):类型或命名空间名称' DbModelBuilder'找不到(你错过了使用指令或汇编引用吗?)

我正在使用EntityFramework 6.1.1。启用项目和包恢复的NuGet包(在NuGet.targets文件中) -

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>

我认为EntityFramework的软件包下载在TFS中也失败了,即使在TFS中构建启动之前,同一项目的其他NuGet软件包也已下载。

我正在为这个项目使用2个包 -

<packages>
<package id="EntityFramework" version="6.1.1" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.6" targetFramework="net45" />
</packages>

构建日志文件 -

RestorePackages:
  "C:\a\src\.nuget\NuGet.exe" install "C:\a\src\<project name>\packages.config" -source ""  -NonInteractive -RequireConsent -solutionDir "C:\a\src\ "
  Restoring NuGet packages...
  To prevent NuGet from downloading packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages'.
  Installing 'Newtonsoft.Json 6.0.6'.
  Successfully installed 'Newtonsoft.Json 6.0.6'.
  All packages listed in packages.config are already installed.

但是在Newtonsoft.Json之后,它甚至没有下载EntityFramework Dlls。

1 个答案:

答案 0 :(得分:3)

最后我做到了。花了一段时间。 此时,有两种不同的选择:

  1. 保留NuGet.targets文件并从所有项目中引用该NuGet.targets文件(对我来说不起作用)

  2. 在构建之前显式调用NuGet.Exe包还原

  3. 选项1对我不起作用,这就是继续第二个选项的原因, 我不得不这样做:

    1. 从.nuget文件夹中删除NuGet.targets文件(不要签入该文件)

    2. 删除并且不签入包文件

    3. 打开记事本中的所有项目文件,并删除http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

    4. 中提到的NuGet.targets文件的引用
    5. 转到VS 2013 - 工具&gt;扩展程序和更新&gt; VS画廊 - 确保您拥有最新的NuGet

    6. 此时,您的项目已准备好在任何构建之前下载Nuget软件包,以测试删除packages文件夹并开始构建,它应该下载所有NuGet软件包。

    7. 现在,对于TFS Continuous构建,不要直接将解决方案文件指向构建模板,而是使用http://blogs.msdn.com/b/dotnet/archive/2013/08/27/nuget-package-restore-with-team-foundation-build.aspx中提到的自定义XML build.proj文件。

    8. 此XML首先调用NuGet.EXE还原路径\ .sln文件,如果未提及* .sln文件,则会在同一目录中选择任何其他解决方案文件

    9. 检查根文件夹中的build.proj,NuGet.exe以及解决方案文件

    10. 现在,通过TFS在线CI,事情进展顺利。不要右键单击Visual Studio解决方案以启用NuGet包还原 - 它将撤消上述所有内容,因为它会带回NuGet.targets文件并直接引用每个proj文件中的文件。