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

Msbuild 确保在TeamCity CI构建期间重新安装Visual Studio解决方案NuGet包的方法,msbuild,continuous-integration,nuget,teamcity,visual-studio-2017,Msbuild,Continuous Integration,Nuget,Teamcity,Visual Studio 2017,我遇到一个问题,在TeamCity上的CI构建期间,尽管我的构建项目使用了NuGet安装程序构建步骤,但没有重新安装NuGet软件包 我已把问题缩小到一个具体问题。在我的开发机器上,引用的路径已明确定义 在生成计算机上,引用的路径为空 我检查了构建机器,以确保NuGet正确下载了新版本的软件包。它是。我还进行了检查,以确保在指定路径时将生成解决方案。是的。但是,每次生成通过CI时,它都会失败,因为某些包的引用路径没有正确还原 我用于解决方案的软件包已签入版本控制,并可在我的解决方案的“软件包

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

我已把问题缩小到一个具体问题。在我的开发机器上,引用的
路径已明确定义

在生成计算机上,引用的路径为空

我检查了构建机器,以确保NuGet正确下载了新版本的软件包。它是。我还进行了检查,以确保在指定路径时将生成解决方案。是的。但是,每次生成通过CI时,它都会失败,因为某些包的引用路径没有正确还原

我用于解决方案的软件包已签入版本控制,并可在我的解决方案的“软件包”文件夹中找到(为方便起见)

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

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

参考:

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

Visual Studio解决方案HintPath设置
我找到了解决这个问题的办法

特定版本
标志设置为
True
,以供参考。这意味着程序正试图解析为所引用程序集的
Major.Minor.Patch.Build
版本

请看下面的图片

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

当CI服务器在何时解析其正在查找的特定版本的路径时,请参见下图

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

我将项目设置为清理构建上的签出文件夹,这一事实加剧了这个问题(否则我不会发现这个问题。我总是在签出之前清理!)


非常感谢@OscarE.FraxedasTormo帮助我了解了所有其他可能的可能性。

您能否从.csproj文件中添加一个示例,显示对其中一个失败依赖项的引用?i、 e.@OscarE.FraxedasTormo添加了您要查找的信息。路径看起来不错。它似乎与解决方案文件有关。您在TeamCity的nuget安装/恢复步骤中是否遇到任何错误?生成代理能否查看这些包的源代码?@OscarE.FraxedasTormo没有错误或警告,并且所有内容都可以从NuGet检查出来。您提到TeamCity代理中的引用失败了吗?你能从VS发布错误吗?TC中的csproj文件是否与您本地的相同?你能在teamcity结帐吗?
<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>
[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