여러 프로젝트가있는 솔루션을위한 NuGet


153

3 개의 프로젝트가있는 솔루션이 있다고 가정하십시오.

  • 핵심
  • UI
  • 테스트

내가 사용하는 NuGet 패키지 중 일부는 3 가지 프로젝트 모두에 적용됩니다. 일부는 UI 및 테스트에만 적용되고 일부는 NUnit과 같은 테스트에만 적용됩니다.

NuGet을 사용하여 이것을 설정 하는 올바른 방법 은 무엇입니까 ?

  1. 참조가 필요할 때마다 세 프로젝트 모두에서 "라이브러리 패키지 참조 추가"를 사용해야합니까?
  2. 패키지가 처음 필요할 때 "라이브러리 패키지 참조 추가"를 사용한 다음 참조 추가-> 찾아보기를 사용하여 후속 사용법을 사용해야합니까?

두 경우 모두 몇 개의 packages.config 파일을 가져야합니까?

답변:


239

이 문제를 해결하려는 사람에게는 다음 옵션이 있습니다.

솔루션> 솔루션의 NuGet 패키지 관리 ...를 마우스 오른쪽 단추로 클릭하십시오.

... 또는 :

도구> 라이브러리 패키지 관리자> 솔루션 용 NuGet 패키지 관리 ...

설치된 패키지 영역으로 이동하면 솔루션의 모든 프로젝트에서 단일 패키지를 '관리'할 수 있습니다.


5
특정 버전의 솔루션 용 패키지를 설치하려면 어떻게합니까? 마법사는 그 옵션을 제공하지 않습니다. 콘솔에서 나는 그것을 그렇게 실행할 수 Install-Package RazorEngine -Version 3.3.0있지만 콘솔 드롭 다운에서 선택된 프로젝트에만 적용됩니다.
MaciejLisCK

Visual Studio 2010에서 지원
됩니까

매우 큰 프로젝트가있는 경우 패키지 관리자가 종속성을 업데이트한다고 믿습니까?
Mick

특정 패키지에 대한 "관리"버튼이 없을 때 어떤 아이디어가 있습니까? System.ServiceModel과 마찬가지로 솔루션 뷰에서이 라이브러리를 관리 할 수 ​​없습니다.
Hoàng Long

@Mick, 언급 된 대화 상자에서 통합 탭을 확인하십시오.

76

콘솔을 사용하여 여러 프로젝트를 대상으로

Tools > Library Package Manager > Package Manager Console

그런 다음이 명령을 사용하십시오

Get-Project PROJECT-NAMES-WITH-COMMAS | Install-Package PACKAGENAME

예를 들어

Get-Project Core,UI | Install-Package FluentDateTime

4
+1 : 적어도 현재 NuGet 버전에서는 솔루션의 크기가 너무 커서 프로젝트 이름 목록을 해당 대화 상자에 붙여 넣을 수 없으므로 "솔루션 용 NuGet 패키지 관리"대화 상자보다이 방법을 선호합니다.
Yodan Tauber

21

이 달콤한 거래는 저에게 효과적입니다.

PM> Get-Project -all | where {$_.Name -match "Songhay.Silverlight" -and
    $_.Name -notmatch "ApplicationLoader" -and $_.Name -notmatch ".Xml"}
    | ForEach-Object {Install-Package MvvmLight -project $_.Name}

2
이것이 완료된 방법입니다! 예를 들어 솔루션의 모든 프로젝트에 대한 모든 json.net 버전을 나열하려면 다음을 시도하십시오.Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -Filter Newtonsoft.Json}
jonypony3

1
@EdwardMMeshuris 매우 좋은 명령이지만 패키지 이름과 정확히 일치하지는 않습니다. 정확한 일치를 위해 약간 업데이트되었습니다Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' }
Dark_Knight

12

여러 솔루션에 패키지를 설치하려면 편리한 Powershell 스크립트를 작성했습니다 ( 여기 참조) .

Get-Project -All명령을 필터링 하고 프로젝트 목록의 하위 세트를 대상으로 지정할 수도 있습니다 .


8

솔루션의 모든 프로젝트에서 모든 외부 라이브러리에 대해 "라이브러리 패키지 참조 추가"를 사용해야합니다. 프로젝트 당 packages.config가 생성됩니다.

그러나 패키지는 한 번만 다운로드하여 다른 모든 프로젝트에서 로컬로 재사용합니다.


4
참고 : 모든 라이브러리 패키지를 업데이트하지 않으면 동일한 어셈블리의 3 가지 버전이 생깁니다. .NET은 GAC에 있거나 이름이 다른 3 가지 버전으로 작업 할 수 있습니다. 그러나 그들은 같은 이름을 가질 것이기 때문입니다. 이전 버전이 최신 버전으로 복사되었으므로 작동하지 않는 빌드로 끝납니다.
graffic

2

에서 패키지 관리자 콘솔 다음 쓸 수있는 명령을 :

Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter 
PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' } | Install-Package 
PACKAGE_NAME -Version VERSION

설치 또는 업데이트에도 해당 명령을 사용할 수 있습니다 (Update-Package)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.