2017-10-27 1 views
1

빌드, 테스트 및 배포 단계가있는 CI/CD 파이프 라인을 설치하고 싶습니다. 내가 구축하고 이미 구축 된 ..\BuildOutput\MyProject.dll에 대한 테스트를 실행합니다프로젝트를 재건하지 않고 msbuild로 nuget 패키지를 만드는 방법은 무엇입니까?

msbuild src\MyProject.csproj /t:Restore 
msbuild src\MyProject.csproj /p:Configuration=Release /p:OutputPath=../BuildOutput 

다음과 빌드 단계에서 내 프로젝트를 구축 할 수 있습니다.

msbuild tests\MyProject.Tests.csproj /t:Restore 
msbuild tests\MyProject.Tests.csproj /p:Configuration=Release /p:OutputPath=../BuildOutput /p:BuildProjectReferences=false 
vstest.console BuildOutput\MyProject.Tests.dll 

이 시점까지는 효과가있는 것으로 보입니다.

이제 너겟 패키지를 생성하고 싶습니다.

msbuild src\MyProject.csproj /t:Pack /p:Configuration=Release /p:OutputPath=../BuildOutput /p:VersionPrefix=1.2.3 

을 그리고 그 BuildOutput 폴더에 MyProject.1.2.3.nupkg를 만들 것입니다 : 나는 호출 할 수 있습니다. 그러나 프로젝트를 다시 빌드합니다.

나는 dotnetcli와 (과) 비슷한 종류를 찾고 있습니다.

dotnet pack --no-build 

내 프로젝트에는 COM 참조가 있기 때문에 dotnet을 사용할 수 없습니다.

는 또한 Nuget.exe로 보았다하지만 내가 msbuild를 구축 건너 뛸 수있는 속성을 가지고 있는가 nuget pack

Unable to cast object of type 'System.String' to type NuGet.Frameworks.NuGet.Frameworks1051960.NuGetFramework'. 

를 호출 할 때 오류가 발생하는 것 같다?

답변

1

워크 플로에서 허용되는지 여부에 따라 다르지만 .csproj 파일의 <PropertyGroup>에있는 <GeneratePackageOnBuild> 속성을 사용하여 프로젝트를 빌드 할 때마다 패키지를 가져올 수 있습니다. 테스트를 통과하지 못하면 .nupkg 파일을 삭제할 수 있지만 적어도 NuGet 패키지를 구할 수있는 추가 재 구축은 필요하지 않습니다.

this article의 끝에서이 설정을 사용하는 방법에 대한 더 완벽한 예입니다 만, 실시 매우 간단한 코드 조각은 다음과 같이 보일 것이다 :뿐만 아니라 내 마음을 교차 흐름

<PropertyGroup> 
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild> 
</PropertyGroup> 
+0

. 따라서 빌드 단계에서 프로젝트를 만들고 패키지를 만듭니다. 배포 할 시간이되면 빌드 단계에서 생성 된 패키지 만 제공합니다. 빌드 단계에서 항상 패키지를 생성하기에는 약간의 중복성이 있다고 느껴지더라도 여전히 쓸모없는 파이프 라인을 선호합니다. :). –

관련 문제