programing

NuGet: PowerShell 또는 CMD를 통해 모든 프로젝트의 특정 버전으로 패키지 업데이트

stoneblock 2023. 10. 16. 21:29

NuGet: PowerShell 또는 CMD를 통해 모든 프로젝트의 특정 버전으로 패키지 업데이트

우리는 더 큰 제품의 다른 부분에 대해 다른 팀이 작업하는 시나리오가 있습니다.모든 솔루션의 모든 Visual Studio Project는 때때로 참조된 NuGet 패키지를 업데이트해야 합니다.업데이트 결과 전체 소스 트리의 모든 프로젝트가 동일한 버전의 패키지를 참조해야 합니다.

PowerShell 스크립트와 같은 자동 접근 방식을 사용하여 모든 프로젝트에서 특정 NuGet 패키지를 특정 버전으로 업데이트할 수 있는 방법이 있습니까?

편집: Visual Studio와 NuGet의 필요한 부분을 로드하여 어셈블리 참조를 올바르게 업데이트할 수 있는 방법이 있습니까?

예:

NuGetScript Update Solution.sln PackageName -version NewVersion

아니면

NuGetScript Update PathToProjects PackageName -version NewVersion

구성 요소가 너무 많아서 Visual Studio에 모두 로드하고 패키지 관리자 UI를 통해 수동으로 업데이트할 수 없습니다.

특정 패키지를 하나의 솔루션에서 업데이트하려면 패키지 관리자 콘솔 창에서 다음 명령줄을 사용하십시오.

Get-Project -All | Update-Package 패키지 이름 -Version newVersion

PowerShell 스크립트를 생성하여 솔루션의 모든 project file 또는 packages.config 파일을 검색한 다음 nuget update 명령을 호출하여 패키지를 업데이트할 수 있습니다.

그러나 Visual Studio 외부에서 패키지를 업데이트할 때 제한이 있으므로 Visual Studio에서 이 작업을 수행할 것을 권장합니다.

update 명령은 모든 새 패키지를 패키지 폴더에 다운로드하여 압축을 풉니다.어셈블리 참조는 프로젝트 파일에서 업데이트되지만 기존 참조로만 제한됩니다.새 패키지에 어셈블리가 추가된 경우 업데이트 명령의 일부로 추가되지 않습니다.새 패키지 종속성에도 해당 어셈블리 참조가 추가되지 않습니다.전체 업데이트를 수행하려면 Visual Studio를 사용합니다.

다음 스크립트가 다른 곳에서 발견되었습니다.저는 제 프로젝트들로 그것을 시도해 보았습니다.원래 링크가 없습니다.

다음 스크립트는 다음 작업을 수행합니다.

  1. 달려.restore폴더에 있는 솔루션에 대한 명령
  2. 모두 찾습니다.packages.config제공된 패키지 ID 이름을 포함하는 파일
  3. 런즈update명령어를 사용합니다.packages.config파일 및 패키지 이름을 매개 변수로 지정합니다.

이것은 그 누에이트를 가정한 것입니다.exe가 이것을 실행할 폴더에 있습니다.

param(
    [Parameter(Mandatory=$true)]
    [string]$packageId
)

Get-ChildItem *.sln -recurse | %{.\\nuget.exe restore $_.fullname}

Get-ChildItem packages.config -Recurse `
  | Where-Object {$_ | Select-String -Pattern $packageId} `
  | %{.\\nuget.exe update -Id $packageId $_.FullName}

언급URL : https://stackoverflow.com/questions/39574042/nuget-update-a-package-to-a-specific-version-in-all-projects-via-powershell-or