首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确保Visual解决方案NuGet包在TeamCity CI构建期间重新安装的方法

确保Visual解决方案NuGet包在TeamCity CI构建期间重新安装的方法
EN

Stack Overflow用户
提问于 2017-05-08 14:25:19
回答 1查看 340关注 0票数 2

我遇到了一个问题,尽管我的构建项目使用了一个NuGet安装程序构建步骤,但是在TeamCity上的CI构建过程中没有重新安装NuGet包。

我把这个问题缩小到一个具体的问题上。在我的开发机器上,对引用的Path是明确定义的。

在生成机器上,对引用的Path为空。

我检查了构建机器,以确保NuGet正在正确下载新版本的包。它是。我还检查了如果指定路径,则确保解决方案将生成。确实如此。但是,每次构建通过CI时都会失败,因为某些包的引用路径无法正确恢复。

用于解决方案的包将被签入版本控制中,并可在解决方案的packages文件夹中使用(为了更好的度量)。

我试图更改TeamCity告诉NuGet更新包的方式,方法是指定使用packages.config文件而不是sln文件。

我已经看到了一些可能的解决方案,但它们需要通过GUI手动更新包,否则信息就不再相关了。

参考资料:

Nuget Packages are missing in Visual Studio

Nuget not updating project references

MSBuild cannot find a reference

Teamcity failing to install packages via nuget

问题

在这种情况下,如何解决NuGet包解析的问题(在构建机器上没有直接的人工干预)?

Visual解决方案HintPath设置

代码语言:javascript
复制
<Reference Include="Company.EnterpriseD.Api, Version=5.0.2.34289, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\Company.EnterpriseD.Api.5.0.2\lib\net462\Company.EnterpriseD.Api.dll</HintPath>
</Reference>
<Reference Include="Company.EnterpriseD.Database, Version=5.0.2.29628, Culture=neutral, processorArchitecture=AMD64">
  <HintPath>..\packages\Company.EnterpriseD.Database.5.0.2\lib\net462\Company.EnterpriseD.Database.dll</HintPath>
</Reference>

来自TeamCity Visual解决方案生成的错误日志

代码语言:javascript
复制
[06:46:42]Step 2/3: Visual Studio (sln) (7s)
[06:46:42][Step 2/3] Starting: C:\BuildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.MsBuildBootstrap.exe /workdir:C:\BuildAgent\work\777f4dbff737cc31 "/msbuildPath:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\bin\MSBuild.exe"
[06:46:42][Step 2/3] in directory: C:\BuildAgent\work\777f4dbff737cc31
[06:46:45][Step 2/3] Company.EnterpriseD.EmailRelay.sln.teamcity: Build target: TeamCity_Generated_Build (4s)
[06:46:45][Company.EnterpriseD.EmailRelay.sln.teamcity] TeamCity_Generated_Build (4s)
[06:46:45][TeamCity_Generated_Build] MSBuild (4s)
[06:46:45][MSBuild] Company.EnterpriseD.EmailRelay.sln: Build target: Build (3s)
[06:46:45][Company.EnterpriseD.EmailRelay.sln] ValidateSolutionConfiguration
[06:46:45][Company.EnterpriseD.EmailRelay.sln] Build (3s)
[06:46:45][Build] MSBuild (3s)
[06:46:45][MSBuild] Company.EnterpriseD.EmailRelay.Relaying\Company.EnterpriseD.EmailRelay.Relaying.csproj: Build default targets (3s)
[06:46:46][Company.EnterpriseD.EmailRelay.Relaying\Company.EnterpriseD.EmailRelay.Relaying.csproj] PrepareForBuild
[06:46:46][Company.EnterpriseD.EmailRelay.Relaying\Company.EnterpriseD.EmailRelay.Relaying.csproj] _GetProjectReferenceTargetFrameworkProperties
[06:46:46][Company.EnterpriseD.EmailRelay.Relaying\Company.EnterpriseD.EmailRelay.Relaying.csproj] ResolveProjectReferences (3s)
[06:46:46][ResolveProjectReferences] MSBuild (3s)
[06:46:46][MSBuild] Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj: Build default targets (3s)
[06:46:46][Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj] PrepareForBuild
[06:46:46][Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj] ResolveAssemblyReferences
[06:46:47][Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj] CoreResGen
[06:46:47][Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj] CoreCompile (1s)
[06:46:47][CoreCompile] Csc (1s)
[06:46:47][Csc] C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\bin\Roslyn\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:x64 /errorreport:prompt /define:TRACE /highentropyva+ /reference:C:\BuildAgent\work\777f4dbff737cc31\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll /reference:C:\BuildAgent\work\777f4dbff737cc31\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\mscorlib.dll" /reference:C:\BuildAgent\work\777f4dbff737cc31\packages\NLog.5.0.0-beta07\lib\net45\NLog.dll /reference:C:\BuildAgent\work\777f4dbff737cc31\packages\Oracle.ManagedDataAccess.12.1.24160719\lib\net40\Oracle.ManagedDataAccess.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.ComponentModel.DataAnnotations.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Configuration.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Data.dll" /reference:C:\BuildAgent\work\777f4dbff737cc31\packages\System.Data.SQLite.Core.1.0.105.0\lib\net46\System.Data.SQLite.dll /reference:C:\BuildAgent\work\777f4dbff737cc31\packages\System.Data.SQLite.EF6.1.0.105.0\lib\net46\System.Data.SQLite.EF6.dll /reference:C:\BuildAgent\work\777f4dbff737cc31\packages\System.Data.SQLite.Linq.1.0.105.0\lib\net46\System.Data.SQLite.Linq.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.IO.Compression.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Net.Http.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Runtime.Serialization.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.ServiceModel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Transactions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\System.Xml.Linq.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\x64\Release\Company.EnterpriseD.EmailRelay.Database.dll /ruleset:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Team Tools\Static Analysis Tools\\Rule Sets\MinimumRecommendedRules.ruleset" /subsystemversion:6.00 /resource:obj\x64\Release\Company.EnterpriseD.EmailRelay.Database.Properties.Resources.resources /resource:database_defintion.sql,Company.EnterpriseD.EmailRelay.Database.database_defintion.sql /target:library /utf8output EmailDatabase.cs Mono.Options-PCL.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs "C:\BuildAgent\temp\buildTmp\.NETFramework,Version=v4.6.2.AssemblyAttributes.cs"
[06:46:47][Csc] Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\bin\Roslyn
[06:46:49][Csc] EmailDatabase.cs(5, 23): error CS0234: The type or namespace name 'Database' does not exist in the namespace 'Company.EnterpriseD' (are you missing an assembly reference?)
[06:46:49][Step 2/3] Error message is logged
[06:46:49][Csc] EmailDatabase.cs(6, 23): error CS0234: The type or namespace name 'Api' does not exist in the namespace 'Company.EnterpriseD' (are you missing an assembly reference?)
[06:46:49][MSBuild] Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj: Build default targets
[06:46:49][Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj] Project Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj failed.
[06:46:49][MSBuild] Company.EnterpriseD.EmailRelay.Queuing\Company.EnterpriseD.EmailRelay.Queuing.csproj: Build default targets
[06:46:49][Company.EnterpriseD.EmailRelay.Queuing\Company.EnterpriseD.EmailRelay.Queuing.csproj] PrepareForBuild
[06:46:49][Company.EnterpriseD.EmailRelay.Queuing\Company.EnterpriseD.EmailRelay.Queuing.csproj] _GetProjectReferenceTargetFrameworkProperties
[06:46:49][Company.EnterpriseD.EmailRelay.Queuing\Company.EnterpriseD.EmailRelay.Queuing.csproj] ResolveProjectReferences
[06:46:49][ResolveProjectReferences] MSBuild
[06:46:49][MSBuild] Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj: Build default targets
[06:46:49][Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj] Project Company.EnterpriseD.EmailRelay.Database\Company.EnterpriseD.EmailRelay.Database.csproj failed.
[06:46:49][Step 2/3] Process exited with code 1
[06:46:49][Step 2/3] MSBuild output
[06:46:49][Step 2/3] Process exited with code 1
[06:46:50][Step 2/3] Step Visual Studio (sln) failed
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-09 20:04:32

我找到了解决这个问题的办法。

Specific Version标志被设置为True以供参考。这意味着程序试图解析到正在引用的程序集的Major.Minor.Patch.Build版本。

请看下面的图片。

在这种情况下,CI代理正在寻找特定版本的5.0.2.34289。但是,在我们的内部NuGet服务器上可用的程序集版本是5.0.2.35182。程序集的API没有更改,只有构建版本。每次我们的CI运行时,它都会重新构建程序集以供使用。发生这种情况的原因是为了确保程序集的测试在构建依赖于它们的项目之前运行和通过。

当CI服务器何时解析路径时,它正在寻找特定版本,见下图。

当它无法将其解析为build version时,它会放弃并说不存在兼容版本的程序集。这就是为什么它会在构建机器上失败的原因。

这个问题由于我将项目设置为清理构建上的签出文件夹(否则我不会发现这个问题)而更加严重。我总是在退房前打扫干净!)

非常感谢@OscarE.FraxedasTormo帮助我完成了所有其他可能的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43850199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档