여러 프로젝트가 포함 된 솔루션이 있습니다. 타사 참조의 대부분이 누락되었지만 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
대화 상자를 사용하여 패키지를 업데이트 할 수 있습니다 .
업데이트 :
-reinstall
Update-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