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