TeamCity CI 빌드 중에 Visual Studio 솔루션 NuGet 패키지가 다시 설치되었는지 확인하는 방법

Dodzi Duma

빌드 프로젝트에 NuGet 설치 관리자 빌드 단계를 사용 했음에도 불구하고 TeamCity에서 CI 빌드 중에 NuGet 패키지가 다시 설치되지 않는 문제가 있습니다.

특정 문제로 문제를 좁혔습니다. 내 개발 컴퓨터에서 Path참조에 대한 명확한 정의가 있습니다.

개발자 머신

빌드 머신 Path에서 참조에 대한이 비어 있습니다.

기계 구축

빌드 머신을 확인하여 NuGet이 새 버전의 패키지를 제대로 다운로드하는지 확인했습니다. 그것은. 또한 경로를 지정하면 솔루션이 빌드되는지 확인했습니다. 그렇습니다. 그러나 빌드가 CI를 통과 할 때마다 특정 패키지의 참조 경로가 제대로 복원되지 않기 때문에 실패합니다.

내 솔루션에 사용하는 패키지는 버전 관리에 체크인되고 내 솔루션의 패키지 폴더에서 사용할 수 있습니다 (좋은 측정을 위해).

TeamCity가 NuGet에 packages.config파일 대신 파일 을 사용하도록 지정하여 패키지를 업데이트하도록 지시하는 방식을 변경하려고했습니다 sln.

몇 가지 가능한 솔루션을 보았지만 GUI를 통해 패키지를 수동으로 업데이트해야하거나 정보가 더 이상 관련이 없습니다.

참고:

Visual Studio에 Nuget 패키지가 없습니다.

Nuget이 프로젝트 참조를 업데이트하지 않음

MSBuild에서 참조를 찾을 수 없습니다.

Teamcity가 Nuget을 통해 패키지를 설치하지 못함

질문

이 상황에서 NuGet 패키지 해결 문제를 해결하는 방법 (빌드 머신에 대한 직접적인 사람 개입 없음)?

Visual Studio 솔루션 HintPath 설정

<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 Studio 솔루션 빌드의 오류 로그

[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
Dodzi Duma

문제에 대한 해결책을 찾았습니다.

Specific Version플래그로 설정하고 True, 기준에 대한. 이것은 프로그램이 Major.Minor.Patch.Build참조되는 어셈블리 버전으로 분석을 시도했음을 의미합니다 .

아래 그림을 참조하십시오.

여기에 이미지 설명 입력

In this case the CI agent is looking for the specific version 5.0.2.34289. However, The assembly version available on our internal NuGet server is 5.0.2.35182. The API of the assembly hasn't changed, only the build version. Each time our CI runs, it rebuilds the assemblies for use. The reason this happens is to ensure that the tests for our assemblies run and pass before building projects that are dependent on them.

When the CI server when to resolve the path it was looking for the specific version see picture below.

여기에 이미지 설명 입력

When it couldn't resolve it down to the build version, it would give up and say that no compatible versions of the assemblies exist. This is why it would fail on the build machine.

이 문제는 빌드에서 체크 아웃 폴더를 정리하도록 프로젝트를 설정했기 때문에 악화되었습니다 (그렇지 않으면 문제에 대해 알지 못했을 것입니다. 체크 아웃하기 전에 항상 정리합니다!).

가능한 다른 모든 가능성을 안내 해준 @ OscarE.FraxedasTormo에게 감사드립니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관