여러 프로젝트가 포함 된 솔루션이 있습니다. 타사 참조의 대부분이 누락되었지만 packages.config각 프로젝트에 대한 파일 이 있습니다 . NuGet에서 필요한 모든 패키지를 설치 / 업데이트하려면 어떻게해야합니까? 각 프로젝트마다 명령 줄을 통해이 작업을 수행해야합니까?
여러 프로젝트가 포함 된 솔루션이 있습니다. 타사 참조의 대부분이 누락되었지만 packages.config각 프로젝트에 대한 파일 이 있습니다 . NuGet에서 필요한 모든 패키지를 설치 / 업데이트하려면 어떻게해야합니까? 각 프로젝트마다 명령 줄을 통해이 작업을 수행해야합니까?
답변:
nuget.exe 를 사용 하여 패키지를 복원하거나 NuGet 2.7 이상을 설치하면 Visual Studio에서 솔루션을 컴파일하여 누락 된 패키지를 복원 할 수 있습니다.
NuGet.exe의 경우 각 프로젝트에 대해 다음 명령을 실행할 수 있습니다.
nuget install packages.config
또는 NuGet 2.7 에서는 명령 줄을 사용하여 솔루션의 모든 패키지를 복원 할 수 있습니다 .
nuget restore YourSolution.sln
둘 다 패키지를 풀다운합니다. 그러나이 명령을 실행할 때 프로젝트 파일은 수정되지 않으므로 프로젝트에 이미 NuGet 패키지에 대한 참조가 있어야합니다. 그렇지 않은 경우 Visual Studio를 사용하여 패키지를 설치할 수 있습니다.
NuGet 2.7 이상에서는 솔루션을 빌드 할 때 Visual Studio가 누락 된 NuGet 패키지를 자동으로 복원하므로 NuGet.exe를 사용할 필요가 없습니다.
솔루션의 모든 패키지를 업데이트하려면 먼저 패키지를 복원 한 다음 NuGet.exe를 사용하여 패키지를 업데이트하거나 Visual Studio에서 패키지 관리자 콘솔 창에서 패키지를 업데이트하거나 마지막으로 관리를 사용할 수 있습니다 패키지 대화 상자.
명령 행에서 솔루션의 패키지를 nuget.org에서 사용 가능한 최신 버전으로 업데이트 할 수 있습니다.
nuget update YourSolution.sln
이렇게하면 NuGet 패키지에서 PowerShell 스크립트가 실행되지 않습니다.
Visual Studio 내에서 패키지 관리자 콘솔 을 사용하여 패키지 를 업데이트 할 수도 있습니다. 이는 NuGet.exe를 사용하여 스크립트를 실행하지 않는 PowerShell 스크립트를 업데이트의 일부로 실행한다는 이점이 있습니다. 다음 명령은 모든 프로젝트의 모든 패키지를 nuget.org에서 사용 가능한 최신 버전으로 업데이트합니다.
Update-Package
이것을 하나의 프로젝트로 제한 할 수도 있습니다.
Update-Package -Project YourProjectName
패키지를 이전에 설치된 것과 동일한 버전으로 다시 설치하려면 명령에 -reinstall인수를 사용할 수 있습니다 Update-Package.
Update-Package -reinstall
이것을 하나의 프로젝트로 제한 할 수도 있습니다.
Update-Package -reinstall -Project YourProjectName
이 -reinstall옵션은 먼저 패키지를 제거한 다음 프로젝트에 다시 설치합니다.
또는 Manage Packages대화 상자를 사용하여 패키지를 업데이트 할 수 있습니다 .
업데이트 :
-reinstallUpdate-Package -reinstall -Project ProjectName
현재 솔루션의 모든 프로젝트에서 모든 패키지를 다시 설치하십시오.
Update-Package -Reinstall
현재 솔루션의 SPECIFIC PROJECT에서 모든 패키지를 다시 설치하십시오 ( unarity 및 ashes999 덕분에 ).
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
Visual Studio 내에서이 작업을 수행하는 또 다른 새롭고 빠른 방법이 있습니다. David Ebbo가 작성한 이 게시물 을 확인하고 문제가 발생하면 주석 섹션을 참조하십시오. 기본적으로 패키지 관리자 프롬프트에서 다음을 수행합니다.
PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore
나중에 솔루션을 빌드 할 때 패키지가 없으면 자동으로 설치됩니다.
최신 정보:
이 기능은 Visual Studio 통합 으로 Nuget 1.6에 내장되어 있으므로 NuGetPowerTools 를 설치하거나 명령을 입력 할 필요도 없습니다. 당신이 할 일은
솔루션 탐색기에서 솔루션 노드를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 복원 사용을 선택하십시오.
자세한 내용은 이 기사 를 읽으십시오 .
웹 사이트 프로젝트를 사용 중이거나 NuGet 패키지 복원을 사용하지 않으려는 경우 다른 솔루션이 있습니다.
패키지 관리자 콘솔을 사용하여 package.config 파일의 모든 패키지를 열거하고 다시 설치할 수 있습니다.
# read the packages.config file into an XML object
[xml]$packages = gc packages.config
# install each package
$packages.packages.package | % { Install-Package -id $($_.id) -Version $($_.version) }
$packages.packages.package | % { Update-Package -reinstall -id $($_.id) }
Update-Package -Reinstall.
Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall
이것은 내가 찾은 최고의 가장 쉬운 예입니다. packages.config에 나열된 모든 너겟을 다시 설치하고 현재 버전을 유지합니다. 교체 YourProjectNameGoesHere프로젝트 이름으로.
최신 NuGet 2.5 릴리스에서는 패키지 관리자에 "모두 업데이트"버튼이 있습니다. http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once
Visual Studio 2015를 사용하고 있으며 위에 제공된 솔루션이 효과가 없으므로 다음을 수행했습니다.
솔루션에서 패키지 폴더를 삭제하고 솔루션의 모든 프로젝트에서 bin 및 obj 폴더를 삭제하고 다시 빌드하십시오.
아마도 다음 오류가 발생했을 것입니다.
nuget.exe를 찾을 수 없습니다
이 문제를 해결하려면 NuGet.targets 파일에서이 줄을 변경하고 true로 설정하십시오.
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
참조 : https://stackoverflow.com/a/30918648 및 https://stackoverflow.com/a/20502049
Nuget 2.8을 설치하는 경우 확인란을 선택하십시오
Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build
Visual Studio에서. 확인 된 경우 프로젝트를 다시 빌드하면 모든 참조 라이브러리가 복원됩니다.
Allow NuGet to download missing packages확인란도 확인해야합니다 .
검색 및 조사 3 시간 후
우리는 원격 저장소로 보낼 패키지 파일을 제한하지 않았기 때문에 팀에 두 명의 멤버 (GitHub 소스 제어 사용)가 있기 때문에 문제가있었습니다. 팀 멤버 중 하나는 서버로 패키지를 보내었고 내 지역.
그 후 PO와 동일한 문제가 있었고 API 프로젝트를 서버에 게시 할 수 없었습니다.
에 나는 방금 사용했다
Update-Package -Reinstall- 패키지 관리자 콘솔에서이 명령을 실행하십시오.
이 명령은 솔루션에서 사용한 모든 패키지를 다시 설치합니다. (모든 프로젝트)
현재 솔루션의 모든 프로젝트에서 모든 패키지를 다시 설치하십시오.
업데이트 패키지 -ProjectName 'NameOfProject'-다시 설치 -패키지 관리자 콘솔에서이 명령을 실행하십시오.
이 명령은 "-ProjectName"뒤에 지정한 프로젝트와 관련된 모든 패키지를 다시 설치합니다. 그리고 솔루션에 모든 패키지를 다시 설치하기 위해 30 분 동안 기다렸 기 때문에 이것이 더 낫다고 생각합니다.
Rodolpho Brock 에게 감사드립니다 .
또한 원격 서버에서 변경 사항을 가져올 때 Visual Studio에 표시되는 "패키지 복원"버튼을 누르는 것이 좋습니다.
가장 먼저해야 할 일은 패키지 복원 기능을 활성화하는 것 입니다. 여기도 참조 하십시오 . 이는 프로젝트가 아닌 솔루션 수준에서 수행됩니다.
그러나 그것은 당신을 완전히 얻지 못할 것입니다-복원 기능을 활성화 한 후에 비슷한 문제가 발생했습니다. (VS2013, NuGet 2.8.)
프로젝트를 커밋 할 때 패키지가 소스 제어에 의도하지 않게 커밋 된 것으로 나타났습니다. 그러나 Visual Studio (및 소스 제어 플러그인)는 체크인을 수행 할 때 바이너리를 유용하게 무시했습니다.
릴리스 브랜치를 만들 때 문제가 발생했습니다. dev / main / trunk 브랜치의 로컬 사본에는 바이너리가있었습니다. 왜냐하면 원래 패키지를 설치 / 다운로드했기 때문입니다.
그러나 새 릴리스 지점에서는
.nupkg파일이 모두 있었으므로 NuGet은 복원 할 것이 없다고 생각했습니다.$(SolutionDir)/packages릴리스 분기 아래의 모든 패키지 폴더를 삭제 한 다음 전체 재구성을 실행했으며 이번에는 빌드가 성공했습니다.
... 물론 소스 폴더 (트렁크 및 릴리스 브랜치)에서 패키지 폴더를 제거하고 제거했습니다. repositories.config파일을 제거 해야하는지 확실하지 않습니다 .
최소한 웹 프로젝트를 위해 프로젝트 템플릿으로 설치 한 많은 구성 요소는 NuGet 패키지입니다. 즉,이 문제는 추가 한 패키지에만 국한되지 않습니다.
따라서 프로젝트 / 솔루션을 생성 한 후 즉시 패키지 복원을 활성화하고 초기 체크인을 수행하기 전에 packages폴더를 지우고 .nuget폴더를 소스 제어에 커밋해야 합니다.
면책 조항 : packages폴더 를 지우는 것이 해상도의 일부 임을 나타내는 SO에 대한 또 다른 대답이 있습니다 . 이로 인해 올바른 방향으로 나아 갔기 때문에 저자에게 크레딧을 제공하고 싶지만 더 이상 해당 질문 / 답변을 찾을 수 없습니다. 넘어지면 수정 사항을 게시 할 것입니다.
또한 및 / 파일을 Update-Package -reinstall수정할 것 입니다. 적어도 그것은 내 경우에 한 일입니다. 어느 IMHO 가이 옵션을 훨씬 덜 매력적으로 만듭니다..sln.csproj.vbproj
시도 Update-Package -reinstall했지만 패키지에서 실패하고 솔루션에 남아있는 모든 프로젝트 패키지 처리를 중지했습니다.
모든 package.config 파일을 열거하고 Update-Package -Reinstall -ProjectName prj -Id pkg각 프로젝트 / 패키지마다 실행 되는 스크립트를 작성했습니다 .
누군가에게 유용 할 수 있기를 바랍니다.
$files = Get-ChildItem -Recurse -Include packages.config;
[array]$projectPackages = @();
$files | foreach { [xml]$packageFile = gc $_; $projectName = $_.Directory.Name; $packageFile.packages.package.id | foreach { $projectPackages += @( ,@( $projectName, $_ ) ) } }
$projectPackages | foreach { Update-Package -Reinstall -ProjectName $_[0] -Id $_[1] }
편집 :
이것은 내가 가진 오류입니다 :
Update-Package : 'EntityFramework.BulkInsert-ef6'패키지를 찾을 수 없습니다. 설치 또는 업데이트를 수행하기 전에 기존 패키지를 복원해야합니다.
수동 실행이
Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6
매우 효과적이었습니다.
VS2012 V11에서 줄 끝에서 "-Reinstall"을 사용하면 작동하지 않습니다.
그래서 나는 단순히 다음을 사용했다.
Update-Package -ProjectName 'NAME_OF_THE_PROJECT'
나는 이것이 오래된 게시물이라는 것을 알고 있지만 이것이 유용 할 수 있다고 생각했습니다. 업데이트 프로세스 중에 특정 패키지 (예 : JavaScript 참조를 업데이트하는 패키지)를 무시해야하는 경우 다음 PowerShell 스크립트를 사용하십시오 (패키지 관리자 콘솔에서 패키지 소스가 "모두"로 설정되어 있는지 확인).
EST 2014-09-25 10:55 EST- 스크립트 버그 수정
$packagePath = "packages.config"
$projectName = "MyProjectName"
$packagesToIgnore = @(
"bootstrap",
"jQuery",
"jquery-globalize",
"jquery.mobile",
"jQuery.jqGrid",
"jQuery.UI.Combined",
"jQuery.Validation",
"Microsoft.jQuery.Unobtrusive.Validation",
"Modernizr",
"Moment.js"
)
[xml]$packageFile = gc $packagePath
$packagesToProcess = $packageFile.packages.package | Where-Object {$packagesToIgnore -notcontains $_.id}
$packagesToProcess | % { Update-Package -reinstall -projectname $projectName -id $($_.id) }
Visual Studio 2017-IDE를 사용하여 컴파일 할 때 누락 된 모든 nuget 패키지를 다운로드하고 "packages"폴더에 저장합니다.
그러나 빌드 머신 컴파일은 msbuild.exe를 사용하여 수행되었습니다. 이 경우 nuget.exe를 다운로드했습니다.
msbuild.exe를 실행하기 전에 각 빌드 프로세스 동안 -> nuget.exe restore NAME_OF_SLN_File을 실행합니다 (.SLN 파일이 하나만 있으면 해당 매개 변수를 무시할 수 있음).
MSbuild -t:restore Xxxx.sln