我已经让TFS做了一些持续的集成构建。今天,它打破了一个解决方案。似乎找不到AutoMapper。所有其他包装都可以找到。
一些相关的观点:
D:\"Program Files"\"Microsoft Team Foundation Server 12.0"\Tools\Nuget.exe restore
后跟msbuild MySolutoin.sln
这来自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)
答案 0 :(得分:11)
I've seen this too. It seems to be triggered as soon as NuGet package restore switches to the internal feed. Once it does this is doesn't switch back to the official nuget.org feed and continues to look for the packages on the internal feed.
Ensure both package sources are added to your NuGet.config file. Also ensure both sources are 'active'.
<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>
See NuGet configuration file documentation.
答案 1 :(得分:1)
马特的回答让我走上正轨,但我们不使用内部饲料,所以我不得不做更多的挖掘。这个答案至少适用于在 Visual Studio 2015 中创建并由 TFS 2015 构建的项目。
在Visual Studio中,打开NuGet包管理器设置(“工具”菜单&gt;“NuGet包管理器”&gt;“包管理器设置”)。从左侧的选项列表中选择“Package Sources”。
在解决方案的根目录下创建nuget.config
文件。这应该与“.sln”解决方案文件的文件夹位置相同。将以下内容复制到配置文件中:
<configuration>
<packageSources>
</packageSources>
<activePackageSource>
<add key="All"
value="(Aggregate source)" />
</activePackageSource>
</configuration>
在<packageSources>
标记内,为“包来源”选项窗口中列出的每个来源创建一个<add key="" value="" />
条目。键是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软件包并成功构建解决方案。
答案 2 :(得分:0)
除了Matt的回答,我还要强调NuGet文档中隐藏的以下内容:
NuGet配置文件按以下优先级顺序处理 (最接近文件夹nuget.exe从wins运行),例如假设 解决方案目录为
c:\a\b\c
:
- 中不受支持
c:\a\b\c\.nuget\nuget.config
- 此文件仅用于解决方案 级别包,并且在nuget 3.0 - 3.4c:\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进行还原
编辑:我找到了yet another reason why packages might not be detected:
我的软件包“A”的版本为
1.1.1.0
。在3.4之前,这个命令效果很好:
nuget install A -version 1.1.1.0
使用NuGet 3.4 RC我得到:
An error occurred while retrieving package metadata for 'A.1.1.1' from source 'N'. An error occurred while retrieving package metadata for 'A.1.1.1' from source 'N'. Data at the root level is invalid. Line 1, position 1.
...
客户端将1.1,1.1.0,1.01.0和1.1.0.0视为相同版本 使用SemVer规则。非规范化版本的特殊原因 在过去套装是因为对于v2 http调用客户端会先 完全按用户指定的方式发送版本字符串