TFS在线构建失败 - NuGet包恢复不起作用。

3
我很乐意帮助您解决这个问题。该代码在本地编译,但在TFS构建一个项目时失败并显示以下信息- Entity\DbModel.Context.cs (16): 在命名空间'System.Data'中找不到类型或命名空间名'Entity'(您是否缺少程序集引用?) Entity\DbModel.Context.cs (19): 找不到类型或命名空间名'DbContext'(您是否缺少一个using指令或程序集引用?) Entity\DbModel.Context.cs (26): 找不到类型或命名空间名'DbModelBuilder'(您是否缺少一个using指令或程序集引用?) 我正在使用EntityFramework 6.1.1 NuGet包和启用了包恢复(NuGet.targets文件)。
<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>

我认为即使在TFS中,与该项目相关的其他NuGet包在构建之前被下载,但EntityFramework的包也无法下载。

我正在为这个项目使用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的Dll文件。
1个回答

3
最终我搞定了。这花费了一些时间。此时有两个不同的选择:
  1. 保留NuGet.targets文件并从所有项目中引用该NuGet.targets文件(对我无效)

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

选项1对我无效,因此我选择了第二个选项,我需要执行以下操作:
  1. 从.nuget文件夹中删除NuGet.targets文件(不要检入该文件)

  2. 删除packages文件夹并不要检入

  3. 在记事本中打开所有项目文件,并根据http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore中提到的方法删除NuGet.targets文件的引用

  4. 转到VS 2013 - 工具>扩展和更新>VS Gallery - 确保您拥有最新的NuGet

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

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

  7. 此XML首先调用NuGet.EXE restore path\.sln文件,如果未提及*.sln文件,则选择同一目录中的任何其他解决方案文件

  8. 将build.proj、NuGet.exe与解决方案文件一起检入到根文件夹中

现在,我在TFS在线CI中顺利进行。不要右键单击Visual Studio解决方案以启用NuGet包还原 - 它会撤消上述所有操作,因为它会重新引入NuGet.targets文件并直接在每个proj文件中引用该文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接