【问题标题】:nuget not downloaded packages under Visual Studio Team Services (visualstudio.com) (Automatic Package Restore)nuget 未下载 Visual Studio Team Services (visualstudio.com) 下的包(自动包还原)
【发布时间】:2014-06-12 00:06:58
【问题描述】:

我真的很喜欢 nuget 并在 Visual Studio Team Services (visualstudio.com) 下构建解决方案。任何帮助将不胜感激。

我有一个包含 36 个项目的解决方案。许多项目使用相同的 5 或 6 个 nuget 包。我已仔细遵循Migrating MSBuild-Integrated solutions to use Automatic Package Restore 的说明,因此在我的解决方案文件夹下有一个 .nuget 文件夹,其中包含唯一的 NuGet.Config 文件,不再包含 Nuget.exe 或 Nuget.targets 文件。所有项目的 Nuget.targets 行都已删除。

我正在使用 Visual Studio 2013 Professional (v12 Update 2),解决方案在本地构建,没有错误或警告。即使在清理和删除包文件夹之后,它也可以正常下载和构建。包文件夹未检入 Visual Studio Team Services。

检查构建日志表明:

  1. nuget 在构建开始时没有启动以检查、下载和解压缩任何未解析的包(它在从 MSBuild-Integrated 迁移到自动包还原之前执行此操作 - 但是尽管如此,它不是能够解析引用)
  2. 我留下了 113 个错误,主要围绕项目无法解析引用这一事实。
  3. 与本地构建(和 MSBuild 集成)不同,Visual Studio Team Services 现在甚至不会在其构建日志中提及 nuget!!!

事情开始失败的日志示例(尽管这显然是因为 nuget 没有介入):

Project "C:\a\src\TFS\RSPlatform\Main\Source\RSPlatform Team Project.sln" (1) is building "C:\a\src\TFS\RSPlatform\Main\Source\Support\A2Refresh\A2Refresh.csproj" (8) on node 1 (default targets).
PrepareForBuild:
  Creating directory "obj\Release\".
ResolveAssemblyReferences:
  Primary reference "Bytescout.Spreadsheet".
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "Bytescout.Spreadsheet". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [C:\a\src\TFS\RSPlatform\Main\Source\Support\A2Refresh\A2Refresh.csproj]
          For SearchPath "C:\a\src\TFS\RSPlatform\Main\Source\Support\A2Refresh\FakesAssemblies".
          Considered "C:\a\src\TFS\RSPlatform\Main\Source\Support\A2Refresh\FakesAssemblies\Bytescout.Spreadsheet.winmd", but it didn't exist.
          Considered "C:\a\src\TFS\RSPlatform\Main\Source\Support\A2Refresh\FakesAssemblies\Bytescout.Spreadsheet.dll", but it didn't exist.
          Considered "C:\a\src\TFS\RSPlatform\Main\Source\Support\A2Refresh\FakesAssemblies\Bytescout.Spreadsheet.exe", but it didn't exist.
          For SearchPath "{HintPathFromItem}".
          Considered "..\..\packages\Bytescout.Spreadsheet.2.4.0.1346\lib\net45\Bytescout.Spreadsheet.dll", but it didn't exist.
          For SearchPath "{TargetFrameworkDirectory}".
          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Bytescout.Spreadsheet.winmd", but it didn't exist.
          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Bytescout.Spreadsheet.dll", but it didn't exist.
          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Bytescout.Spreadsheet.exe", but it didn't exist.
          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\Bytescout.Spreadsheet.winmd", but it didn't exist.
          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\Bytescout.Spreadsheet.dll", but it didn't exist.
          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\Bytescout.Spreadsheet.exe", but it didn't exist.
          For SearchPath "{Registry:Software\Microsoft\.NETFramework,v4.5.1,AssemblyFoldersEx}".
          Considered AssemblyFoldersEx locations.
          For SearchPath "{AssemblyFolders}".

谁能建议我应该如何让 Visual Studio Team Services 使用 nuget? 如果自动包还原建议删除 ~/.nuget/NuGet.exe,Visual Studio Team Services 甚至应该如何使用 NuGet?

提前致谢, 克里斯

【问题讨论】:

  • 你有没有想过这个问题?我在这方面进行了大约 12 个小时的反复试验,但没有运气。答案中的链接说 VSO 的默认工作流应该已经处理了这个问题,但我已经打开它们并确认没有实现 nuget 包还原。
  • 嗨,松饼人,我没有。 @probackpacker 的响应确实有助于让 nuget 启动并执行包还原过程,但是,当它继续构建解决方案/项目时,相关项目仍然无法找到程序集。查看我的日志文件(6 月 26 日 9:09)了解我的进度。
  • 这是好的。与您的 30 多个项目相比,我的设置要简单得多,但我仍然可以重现这种愚蠢的不当行为!我有一个带有一个 (1!) 文件的控制台应用程序,Program.cs。一切都很好,直到我从 NuGet 添加任何东西 - 我尝试了 EF 和 nUnit。然后——噗!什么都没有了。我认为这不是不可能解决的,只是 MS 的一个非常愚蠢的设置。有什么提示吗?

标签: visual-studio-2013 azure-devops nuget-package-restore


【解决方案1】:

如果您在 Visual Studio Team Services 上构建,那么我发现 Nuget.exe 和 Nuget.targets 都需要存在,这似乎与您通过谷歌搜索此主题可以找到的所有建议相反。

将它们添加到我的 Visual Studio Team Services 构建中。

【讨论】:

  • 我确定我也尝试过该选项,但我会回去试一试并报告。至少,它可能会在日志文件中输出不同的内容,然后我可以在这里反馈。
  • 你有解决方案的 build.proj 文件吗?
  • 我会看看并提供。
  • 搜索 2 小时后,这为我解决了问题。只需要签入 nuget.exe
  • 在按照信中提供的所有说明进行操作后,我遇到了与 OP 相同的问题。最后检查 nuget.exe 解决了这个问题。我不需要包含 .target 文件。
【解决方案2】:

在尝试了很多事情后,我发现我使用了错误的默认模板。

我正在使用:

DefaultTemplate.11.1.xaml

对我来说正确的模板是:

TfvcTemplate.12.xaml

当我使用这个模板时,构建从 nuget 恢复并正确完成

【讨论】:

  • 我的 VS Online 门户中没有该模板...您是如何获得它的?
【解决方案3】:

我没有使用过 Visual Studio Team Services,但 NuGet docs 声称包还原应该是默认构建过程的一部分

适用于本地 Team Foundation Build 2013 和 Visual Studio Online (以前的 Team Foundation Service),默认的构建过程 模板已经实现了 NuGet 包还原工作流,而无需 任何特殊配置。以下信息仅适用于 Team Foundation Build 2012 及更早版本,或构建流程模板 已自定义并具有 NuGet 还原功能 删除。

如果由于某种原因您的构建过程不包括此步骤(似乎是这种情况),您可能需要手动添加它。这个blog post 详细介绍了如何将包还原与团队服务一起使用。它使用专用的构建文件和上一个链接中描述的过程。

【讨论】:

  • 你好背包客。我今晚刚从假期回来。初步查看您的答案看起来很有希望,但我会抽出一些时间阅读您提供的链接并在我的脑海中清楚地了解它。完成此操作后,我会报告。干杯。
  • 我已阅读您提供给我的非常有用的博文,并将 NuGet.exe 添加到工具文件夹中,并创建了一个 msbuild 项目,该项目在构建解决方案之前执行 NuGet 恢复。我现在可以看到包正在恢复,但是由于某些疯狂的原因,主编译仍然无法解析程序集!不幸的是,即使在详细的构建日志中,构建包的路径也没有明确报告。我已经尝试更改我的 msbuild.proj 的“outdir”,但仍然没有得到解决。有任何想法吗?谢谢。
  • @ChrisWalsh 我也遵循了这一点。结果相同。似乎最初的问题是构建器找不到 NuGet 包。我们认为这是因为它们未能恢复。 然而,也可能是因为它们存在但服务器没有正确的下摆路径!我可以在我的日志中看到它们正在被复制。因此,添加显式还原步骤解决了我们没有的问题。然后,由于同样的原因,构建失败(从 NuGet 两次 恢复,但没有设置正确的路径)。我现在非常接近切换到 TeamCity...
猜你喜欢
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多