TFS可以';t还原NuGet包

TFS可以';t还原NuGet包,tfs,nuget,tfsbuild,nuget-package-restore,Tfs,Nuget,Tfsbuild,Nuget Package Restore,我让TFS做了一些持续集成构建。今天,只有一个解决方案失败了。似乎找不到汽车制造商。其他所有的包裹都可以找到 有几点相关: 没有一个包在源代码管理中,我们让TFS恢复它们 我们有一个内部NuGet提要,但在其他解决方案中它似乎不是问题,在这个解决方案中,我们仍然需要实体框架来恢复,只是没有AutoMapper 我尝试删除并重新添加NuGet包。不走运 如果我使用远程桌面连接到构建服务器并在那里的VisualStudio中打开项目,它会很好地恢复包和构建 我可以通过执行 d:\“程序文件”\“微

我让TFS做了一些持续集成构建。今天,只有一个解决方案失败了。似乎找不到汽车制造商。其他所有的包裹都可以找到

有几点相关:

  • 没有一个包在源代码管理中,我们让TFS恢复它们
  • 我们有一个内部NuGet提要,但在其他解决方案中它似乎不是问题,在这个解决方案中,我们仍然需要实体框架来恢复,只是没有AutoMapper
  • 我尝试删除并重新添加NuGet包。不走运
  • 如果我使用远程桌面连接到构建服务器并在那里的VisualStudio中打开项目,它会很好地恢复包和构建
  • 我可以通过执行<代码> d:\“程序文件”\“微软Team Foundation Server 12”\Too\\NuGET.EXE还原< /COD> >其次是代码> MSBudio MySulutoin .SLN
  • TFS服务器安装在D:\驱动器上
这来自TFS日志:

D:\Program Files\Microsoft Team Foundation Server 12.0\Tools\nuget.exe restore "C:\Builds\1\MyCompany Web\FclQuoteWcfService\src\FclQuoteWcfService.sln" -NonInteractive
Installing 'EntityFramework 6.1.3'.
Installing 'InternalPackage 1.0'.
Successfully installed 'InternalPackage 1.0'.
Successfully installed 'EntityFramework 6.1.3'.
Unable to find version '3.3.1' of package 'AutoMapper'.
C:\Program Files (x86)\MSBuild\12.0\bin\amd64\MSBuild.exe /nologo /noconsolelogger "C:\Builds\1\MyCompany Web\FclQuoteWcfService\src\FclQuoteWcfService.sln" /nr:False /fl /flp:"logfile=C:\Builds\1\MyCompany Web\FclQuoteWcfService\src\FclQuoteWcfService.log;encoding=Unicode;verbosity=normal" /p:SkipInvalidConfigurations=true /m /p:OutDir="C:\Builds\1\MyCompany Web\FclQuoteWcfService\bin\\" /p:VCBuildOverride="C:\Builds\1\MyCompany Web\FclQuoteWcfService\src\FclQuoteWcfService.sln.vsprops" /dl:WorkflowCentralLogger,"D:\Program Files\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;BuildUri=vstfs:///Build/Build/230;IgnoreDuplicateProjects=False;InformationNodeId=12;TargetsNotLogged=GetNativeManifest,GetCopyToOutputDirectoryItems,GetTargetPath;TFSUrl=http://ctidev2k8:8080/tfs/MyCompany;"*WorkflowForwardingLogger,"D:\Program Files\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;" /p:BuildId="9aa9f8af-c9b9-4d0a-ba06-7cc959231d8e,vstfs:///Build/Build/230" /p:BuildLabel="FclQuoteWcfService_20150330.2" /p:BuildTimestamp="Mon, 30 Mar 2015 20:40:07 GMT" /p:BuildSourceVersion="LFclQuoteWcfService_20150330.2@$/MyCompany Web" /p:BuildDefinition="FclQuoteWcfService"
 Exception Message: MSBuild error 1 has ended this build. You can find more specific information about the cause of this error in above messages. (type BuildProcessTerminateException) Exception Stack Trace: at System.Activities.Statements.Throw.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)

我也见过这个。它似乎会在NuGet package restore切换到内部提要时立即触发。一旦它这样做了,它就不会切换回官方的nuget.org提要,并继续在内部提要上查找包

确保两个包源都添加到您的NuGet.config文件中。同时确保两个源都处于“活动”状态

<configuration>
    <packageSources>
        <add key="nuget.org"
             value="https://www.nuget.org/api/v2/" />
        <add key="example.com"
             value="http://example.com/feed/nuget/" />
    </packageSources>
    <activePackageSource>
        <add key="All"
             value="(Aggregate source)" />
    </activePackageSource>
</configuration>


文件

除了Matt的回答,我还想强调NuGet文档中隐藏的以下内容:

NuGet配置文件按以下优先级顺序处理 (最靠近文件夹nuget.exe从wins运行),例如 解决方案目录是
c:\a\b\c

  • c:\a\b\c\.nuget\nuget.config
    -此文件仅用于解决方案 级别的软件包,并且在nuget 3.0-3.4中不受支持
  • c:\a\b\c\nuget.config
  • c:\a\b\nuget.config
  • c:\a\nuget.config
  • c:\nuget.config
  • 特定于用户的配置文件,
    %AppData%\NuGet\NuGet.config
  • 或用户指定的文件通过选项
    -ConfigFile
这可以解释特定场景中的一些奇怪行为,即恢复是否拾取配置的提要,这取决于您是使用nuget 2.x还是3.x进行恢复

编辑:我发现:

我有版本为
1.1.1.0
的软件包“A”

在3.4之前,该命令工作良好:

nuget安装A-版本1.1.1.0

使用NuGet 3.4 RC,我可以获得:

从中检索“A.1.1.1”的包元数据时出错
来源‘N’。检索的包元数据时出错
“A.1.1.1”来自源“N”。根级别的数据无效。线
1,位置1。

客户端将1.1、1.1.0、1.01.0和1.1.0.0视为同一版本 使用SemVer规则。非规范化版本的原因很特殊 过去的情况是,对于v2 http调用,客户机将首先 完全按照用户指定的格式发送版本字符串


马特的回答让我走上了正确的道路,但我们没有使用内部反馈,所以我不得不做更多的挖掘。这个答案至少适用于在Visual Studio 2015中创建并由TFS 2015构建的项目

在Visual Studio中,打开NuGet软件包管理器设置(工具菜单>NuGet软件包管理器>软件包管理器设置)。从左侧的选项列表中选择“包源”

在解决方案的根目录下创建
nuget.config
文件。这应该是与“.sln”解决方案文件相同的文件夹位置。将以下内容复制到配置文件中:

<configuration>
    <packageSources>

    </packageSources>
    <activePackageSource>
        <add key="All"
             value="(Aggregate source)" />
    </activePackageSource>
</configuration>

标记中,为“包源”选项窗口中列出的每个源创建一个
条目。键是URL上方显示的源的名称,值是URL本身。包括“可用包源”和“机器范围包源”中列出的那些。我没有为本地文件系统创建条目,因为在这个解决方案中没有使用它。根据上面的屏幕截图,完整的配置文件现在包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <add key="nuget.org"
             value="https://api.nuget.org/v3/index.json" />
        <add key="Microsoft and .NET"
             value="https://www.nuget.org/api/v2/curated-feeds/microsoftdotnet/" />
    </packageSources>
    <activePackageSource>
        <add key="All"
             value="(Aggregate source)" />
    </activePackageSource>
</configuration>


nuget.config
文件提交到源代码管理后,TFS能够下载所有必要的nuget包并成功构建解决方案。

您是否仅从构建服务器上的内部nuget提要进行还原?或者您也允许从nuget.org进行恢复?如果没有,那么检查包是否在您的内部提要中。另外,在手动运行构建时,您可能以具有不同访问权限的不同用户身份运行(以及不同的nuget.config全局文件,以及不同的nuget存储库)。