일부 프로젝트가 여러 솔루션에 포함 된 경우 모든 솔루션에 대한 공통 너겟 패키지 폴더 설정


137

외부 및 내부 패키지 소스에서 패키지를 검색하기 위해 NuGet을 사용하여 매우 편리합니다. 그러나 패키지마다 솔루션마다 기본적으로 저장되어 있으며 NuGet 참조가있는 일부 프로젝트가 여러 솔루션에 포함되어 있으면 매우 실망 스럽습니다. 그런 다음 다른 개발자 나 빌드 시스템에서 실제로 사용할 수없는 다른 솔루션 패키지 폴더로 참조가 변경됩니다.

NuGet 릴리스 2.1과 함께 공통 패키지 위치 (아마도 프로젝트 루트 레벨에서 TFS 소스 제어를 사용하고 있음)를 지적하는 방법이 있음을 알았습니다 ( 릴리스 노트 참조) . NuGet v2.7을 사용하고 있습니다.

그러나 나는 이것의 영향을 보지 않고 nuget.config 파일을 추가하려고 시도했습니다. 패키지는 여전히 솔루션 폴더에 저장됩니다. 내가 놓친 것이 있습니까? 누가 그 질문에 대답하는지에 따라 nuget.config 파일에 추가 할 xml 노드의 다른 구조가있는 것 같습니다. Schwarzie는 다른 Stackoverflow 스레드 에 대해 제안 합니다 .

<settings>
  <repositoryPath>..\..\[relative or absolute path]</repositoryPath>
</settings>

NuGet 2.1 릴리스 정보 (위 링크 참조)는 다음 형식을 제안합니다.

<configuration>
  <config>
    <add key="repositoryPath" value="..\..\[relative or absolute path]" />
  </config>
</configuration>

나는 이것들 중 어느 하나 또는 둘 다가 결국 작동할지 모르겠습니다. 솔루션 수준에서 두 가지를 모두 시도했습니다. nuget.config 파일을 TFS 프로젝트 루트 레벨에 배치 할 수 있습니까, 아니면 솔루션 디렉토리에 있어야합니까? NuGet은 이러한 파일의 설정을 특정 순서로 읽고 적용하는 것처럼 보입니다. 솔루션 레벨의 nuget.config 파일이 TFS 프로젝트 루트 레벨의 파일을 대체하는 여러 레벨로 설정하는 것이 합리적입니다. 이것을 명확히 할 수 있습니까?

해당 참조가 작동하려면 설치된 모든 패키지를 제거해야합니까? 누군가가 솔루션 별 너겟 사용법에서 여러 솔루션에 속한 프로젝트가 필요한 너겟 패키지를 찾을 수있는 공통 패키지 폴더로 이동하는 단계별 지침을 제공 할 수 있다면 좋을 것입니다.


3
귀하의 질문에 대한 짧은 대답 (아래 Vermis의 답변에 숨겨져 있음)이 $상대 경로 앞에 누락되어 있다고 생각 합니다. 또한 NuGet.Config 파일에 대한 질문에 대한 답변은 여기에 있습니다 . 그것은 .nuget에서 처음으로 모습, 모든 상위 디렉토리에서, 다음의 AppData의 '글로벌'파일에서 : 다음 (어떤 역순으로 적용 하는 방법).
Benjol

이것은 어려운 것 같습니다. 이 문제에 대한 해결책이 될 수있는 Paket 도구가 있습니다 : fsprojects.github.io/Paket
Tuomas Hietanen

늦은 댓글. VS 시작 중에 nuget.config 파일을 읽는 것처럼 보이기 때문에이 변경을 시작할 때 Visual Studio를 실행 해야하는 경우 Visual Studio를 다시 시작해야한다고 추가하고 싶었습니다. 또한 $가 없으면 아무런 문제가 없었으며 백 슬래시로 시작하지 마십시오.
MBWise

답변:


147

둘 이상의 솔루션에서 참조 된 프로젝트가있는 외부 및 내부 패키지 소스와 비슷한 상황이 있습니다. 오늘 코드 기반 중 하나를 사용 하여이 작업을 수행했으며 개발자 워크 스테이션 및 빌드 서버와 함께 작동하는 것 같습니다. 아래 프로세스는이 시나리오를 염두에두고 있습니다 (공통 패키지 폴더를 다른 곳에 배치하는 것은 어렵지 않습니다).

  • 코드베이스
    • 프로젝트 A
    • 프로젝트 B
    • 프로젝트 C
    • 솔루션
      • 해결책 1
      • 해결책 2
      • 해결책 3
      • 패키지 (모든 솔루션이 공유하는 공통 패키지)

Visual Studio 2015 업데이트 3을 통해 NuGet 3.5.0.1484부터 답변 업데이트

이 프로세스는 처음에이 문제를 해결하고 업데이트 할 때라고 생각했을 때보 다 조금 쉬워졌습니다. 일반적으로 프로세스는 적은 단계로 동일합니다. 결과는 다음을 해결하거나 제공하는 프로세스입니다.

  • 소스 코드 제어에 커밋해야하는 모든 것이 솔루션에서 표시되고 추적됩니다.
  • Visual Studio에서 패키지 관리자를 사용하여 새 패키지를 설치하거나 패키지를 업데이트하면 올바른 저장소 경로가 사용됩니다
  • 초기 구성 후 .csproj 파일을 해킹하지 않습니다
  • 개발자 워크 스테이션을 수정하지 않음 (체크 아웃시 코드 작성 준비)

알아야 할 몇 가지 잠재적 단점이 있습니다 (YMMV는 아직 경험하지 못했습니다). 아래에서 Benol의 답변과 의견을 참조하십시오.

NuGet.Config 추가

\ Solutions \ 폴더의 루트에 NuGet.Config 파일을 작성하려고합니다. 이 파일이 작성하는 UTF-8 인코딩 파일인지 확인하십시오.이를 수행하는 방법을 모르면 Visual Studio의 파일-> 새로 만들기-> 파일 메뉴를 사용하여 XML 파일 템플리트를 선택하십시오. NuGet.Config에 다음을 추가하십시오.

<?xml version="1.0" encoding="utf-8"?>
<configuration>  
  <config>
    <add key="repositoryPath" value="$\..\Packages" />
  </config>
</configuration>

repositoryPath 설정의 경우 $ 토큰을 사용하여 절대 경로 또는 상대 경로 (권장)를 지정할 수 있습니다. $ 토큰은 NuGet.Config가있는 위치를 기준으로합니다 ($ 토큰은 실제로 NuGet.Config 위치 보다 한 레벨 아래 에 있습니다). 따라서 \ Solutions \ NuGet.Config가 있고 \ Solutions \ Packages를 원하면 $ \ .. \ Packages를 값으로 지정해야합니다.

다음으로 "NuGet"(솔루션을 마우스 오른쪽 단추로 클릭하고 추가-> 새 솔루션 폴더)과 같은 솔루션 폴더에 솔루션 폴더를 추가하려고합니다. 솔루션 폴더는 Visual Studio 솔루션에만 존재하는 가상 폴더이며 드라이브에 실제 폴더를 만들지 않으며 어디서나 파일을 참조 할 수 있습니다. "NuGet"솔루션 폴더를 마우스 오른쪽 단추로 클릭 한 다음 추가-> 기존 항목을 선택하고 \ Solutions \ NuGet.Config를 선택하십시오.

우리가이 작업을 수행하는 이유는 솔루션에서 볼 수 있고 소스 코드 제어에 올바르게 적용되도록하는 데 도움이되기 때문입니다. 공유 프로젝트에 참여하는 코드베이스의 각 솔루션에 대해이 단계를 수행 할 수 있습니다.

NuGet.Config 파일을 .sln 파일 위의 \ Solutions \에 배치하면 NuGet이 "현재 작업 디렉토리"에서 폴더 구조를 재귀 적으로 탐색하여 사용할 NuGet.Config 파일을 찾습니다. "현재 작업 디렉토리"는 여기서 몇 가지 다른 것을 의미합니다. 하나는 NuGet.exe의 실행 경로이고 다른 하나는 .sln 파일의 위치입니다.

패키지 폴더 전환

먼저 각 솔루션 폴더를 살펴보고 존재하는 \ Packages \ 폴더를 삭제하는 것이 좋습니다 (먼저 Visual Studio를 닫아야합니다). 이렇게하면 NuGet이 새로 구성된 \ Packages \ 폴더를 어디에 두는지 쉽게 알 수 있으며 잘못된 \ Packages \ 폴더에 대한 링크가 실패한 후 수정할 수 있습니다.

Visual Studio에서 솔루션을 열고 모두 다시 빌드를 시작하십시오. 나타날 모든 빌드 오류를 무시하십시오.이 시점에서 예상됩니다. 그러나 빌드 프로세스 시작시 NuGet 패키지 복원 기능이 시작됩니다. \ Solutions \ Packages \ 폴더가 원하는 위치에 생성되었는지 확인하십시오. 그렇지 않은 경우 구성을 검토하십시오.

이제 솔루션의 각 프로젝트에 대해 다음을 수행하려고합니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 프로젝트 언로드를 선택하십시오.
  2. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Edit your-xxx.csproj를 선택하십시오.
  3. \ packages \에 대한 참조를 찾아 새 위치로 업데이트하십시오.
    • 이들 중 대부분은 <HintPath> 참조이지만 전부는 아닙니다. 예를 들어 WebGrease와 Microsoft.Bcl.Build에는 업데이트해야 할 별도의 경로 설정이 있습니다.
  4. .csproj를 저장 한 다음 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트 다시로드를 선택하십시오.

모든 .csproj 파일이 업데이트되면 다른 모두 다시 빌드를 시작하면 누락 된 참조에 대한 빌드 오류가 더 이상 발생하지 않습니다. 이제 작업이 완료되었으며 이제 공유 패키지 폴더를 사용하도록 NuGet을 구성했습니다.

VStudio 2012의 NuGet 2.7.1 (2.7.40906.75) 기준

명심해야 할 것은 nuget.config가 nuget 패키지 시스템의 모든 경로 설정을 제어하지는 않는다는 것입니다. 이것은 특히 이해하기 혼란 스러웠습니다. 특히 문제는 msbuild 및 Visual Studio (msbuild 호출)가 nuget.config의 경로를 사용하지 않고 nuget.targets 파일에서 경로를 재정의한다는 것입니다.

환경 준비

먼저 솔루션 폴더를 살펴보고 존재하는 모든 \ packages \ 폴더를 제거합니다. 이렇게하면 모든 패키지가 올바른 폴더에 눈에 띄게 설치되고 솔루션 전체에서 잘못된 경로 참조를 발견하는 데 도움이됩니다. 다음으로 최신 Nuget Visual Studio 확장이 설치되어 있는지 확인하십시오. 또한 각 솔루션에 최신 nuget.exe가 설치되어 있는지 확인하십시오. 명령 프롬프트를 열고 각 $ (SolutionDir) \ .nuget \ 폴더로 이동하여 다음 명령을 실행하십시오.

nuget update -self

NuGet에 대한 공통 패키지 폴더 경로 설정

각 $ (SolutionDir) \ .nuget \ NuGet.Config를 열고 <configuration> 섹션 안에 다음을 추가하십시오.

<config>
    <add key="repositorypath" value="$\..\..\..\Packages" />
</config>

참고 : 절대 경로 또는 상대 경로를 사용할 수 있습니다. $와 함께 상대 경로를 사용하는경우 NuGet.Config 위치 아래 한 수준에 상대적이라는 것을명심하십시오 (버그라고 생각하십시오).

MSBuild 및 Visual Studio의 공통 패키지 폴더 경로 설정

각 $ (SolutionDir) \ .nuget \ NuGet.targets를 열고 다음 섹션을 수정하십시오 (Windows 이외의 경우 그 아래에 다른 섹션이 있음에 유의하십시오).

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
    <!-- Windows specific commands -->
    <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
    <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
    <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>

패키지 업데이트

<PackagesDir>$([System.IO.Path]::GetFullPath("$(SolutionDir)\..\Packages"))</PackagesDir>

참고 : GetFullPath는 상대 경로를 절대 경로로 해석합니다.

모든 너겟 패키지를 공통 폴더로 복원

명령 프롬프트를 열고 각 $ (SolutionDir) \ .nuget으로 이동하여 다음 명령을 실행하십시오.

nuget restore ..\YourSolution.sln

이때 공통 위치에 단일 \ packages \ 폴더가 있어야하며 솔루션 폴더에는 하나도 없어야합니다. 그렇지 않은 경우 경로를 확인하십시오.

프로젝트 참조 수정

텍스트 편집기에서 모든 .csproj 파일을 열고 \ packages에 대한 참조를 찾아 올바른 경로로 업데이트하십시오. 이들 중 대부분은 <HintPath> 참조이지만 전부는 아닙니다. 예를 들어 WebGrease와 Microsoft.Bcl.Build에는 업데이트해야 할 별도의 경로 설정이 있습니다.

솔루션 구축

Visual Studio에서 솔루션을 열고 빌드를 시작하십시오. 복원해야하는 누락 된 패키지에 대해 불평하는 경우 패키지가 누락되어 복원해야한다고 가정하지 마십시오 (오류가 오도 될 수 있음). .csproj 파일 중 하나에서 잘못된 경로 일 수 있습니다. 패키지를 복원하기 전에 먼저 확인하십시오.

누락 된 패키지에 대한 빌드 오류가 있습니까?

.csproj 파일의 경로가 올바른지 이미 확인한 경우 두 가지 시도 옵션이 있습니다. 이것이 소스 코드 컨트롤에서 코드를 업데이트 한 결과라면 깨끗한 복사본을 확인한 다음 빌드 할 수 있습니다. 이것은 개발자 중 한 명에게 효과가 있었고 .suo 파일 또는 이와 유사한 파일에 아티팩트가 있다고 생각합니다. 다른 옵션은 해당 솔루션의 .nuget 폴더에있는 명령 행을 사용하여 패키지를 수동으로 복원하는 것입니다.

nuget restore ..\YourSolution.sln

긴 문제에 대한 긴 답변에 감사드립니다. 이 솔루션을 사용 해보고 다시 연락 드리겠습니다.
매트 이삭손

동일한 디렉토리에 .sln이 모두 있습니까? 그들은 같은 패키지 디렉토리를 공유하게 될까요?
tofutim

7
이 대답은 너겟이 얼마나 단단한지를 보여줍니다. 이러한 단순한 개념을 가능하게하기 위해 복잡하고 견고한 구조를 만들어야하는 것은 다음과 같습니다. "솔루션간에 동일한 어셈블리를 공유"는 전체 디자인이 잘못되었음을 나타냅니다.
Mick

1
HintPaths 수정 작업-원하는대로 NuGet.config를 업데이트 한 후 Package-Manager 콘솔에서 "Update-Package -reinstall"을 실행하십시오. 힌트 패키지도 수정하여 모든 패키지를 다시 설치합니다. 이 후-당신은 유물이 남아있을 수 있습니다 (일부 실버 라이트 프로젝트에 있었음-타겟 / 빌드의 "오래된"수입품이 여전히 존재했습니다)
johannes.colmsee

1
@Vermis 모든 솔루션에 공통 너겟 패키지 폴더를 설정하면. Azure Devops 빌드에 미치는 영향은 무엇입니까?
Pankaj Devrani

39

모든 프로젝트에 공통 패키지 위치를 설정하는 대신 프로젝트에서 HintPath를 다음과 같이 변경할 수도 있습니다.

<HintPath>$(SolutionDir)\packages\EntityFramework.6.1.0\lib\net40\EntityFramework.dll</HintPath>

대부분의 경우 공유 프로젝트에는 패키지가 거의 없으므로 쉽게 변경할 수 있습니다.

코드를 분기 할 때 일반적인 저장소를 설정할 때 상대 경로를 변경해야한다는 것이 더 나은 해결책이라고 생각합니다.이 솔루션에서는이 작업을 수행 할 필요가 없습니다.


2
Adam은 맞습니다. 이것은 놀라운 어리석은 문제에 대한 가장 간단한 해결책입니다.
lapsus

1
훌륭한 솔루션입니다. 코드 구조를 재구성 할 필요가없는 간단하고 명확합니다.
RredCat

2
AFAIK $ (SolutionDir)은 VS를 통해 빌드가 완료된 경우에만 설정됩니다. 그래서 더 개봉 설정 / P 않는 한, MSBuild.exe를 통해 직접 구축하지 : SolutionDir = 경로
라스 닐슨

% APPDATA % \ Roaming \ NuGet \ NuGet.Config
Korayem

15
이것은 패키지를 업데이트하고 HintPath를 새로운 상대 경로로 덮어 쓸 때까지 효과적입니다. 많은 패키지가있는 큰 솔루션에서 꽤 지루합니다. 하나님은 당신이 업데이트 패키지 -Reinstall를 실행해야합니다 금지 ...
gravidThoughts

22

최신 버전의 NuGet (2.7) 및 VS2012에서 이것을 시도한 경험 :

  • 디스크 및 솔루션에서 .nuget 폴더를 삭제하십시오.
  • NuGet.Config 파일을 모든 솔루션의 공통 상위 폴더에 넣습니다.
  • 기존 패키지 폴더 삭제
  • 모든 csproj 파일을 살펴보고 새 위치를 가리 키도록 HintPaths를 변경하십시오.
  • 이익

필자의 경우 모든 패키지를에 넣고 싶었 .packages으므로 NuGet.Config는 다음과 같습니다.

 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <config>
     <add key="repositorypath" value=".packages" />
   </config>
 </configuration>

발생할 수있는 몇 가지 '이상한'일이 있지만, 견딜 수 있다고 생각합니다.

  • 한 솔루션에서 패키지를 '업데이트'하면 패키지 폴더에서 이전 버전이 즉시 삭제됩니다 (다른 솔루션이 있는지 여부를 알 수 없음). 다른 솔루션은 필요할 때 복원하기 때문에 크게 신경 쓰지 않습니다.
  • 솔루션을 마우스 오른쪽 단추로 클릭하여 솔루션을 추가하려고하면 이미 다른 솔루션에 패키지가있는 경우 해당 패키지가 있으며 '설치'단추 대신 '녹색 체크 표시'가 표시됩니다. 나는 일반적으로 프로젝트를 마우스 오른쪽 버튼으로 클릭하여 설치하므로 전혀 신경 쓰지 않습니다.

면책 조항 : 나는 오늘 이것을 시도했지만 그것을 백업 할 장기적인 경험이 없습니다!


4
이다 그것을 할 권장되는 방법. 허용 된 답변에서 nuget 복원을 수행하는 이전 msbuild 통합 방법은 피타이며 NuGet.config를 sln과 함께 자동 패키지 복원과 함께 사용하는 것을 확인할 수 있습니다. 그것을 공통 부모 디렉토리에 넣으면 확인할 수 없습니다.

1
NuGet.Config를 모든 솔루션 (TFS)의 공통 상위 폴더에 배치하여 참조 할 수있는 방법은 무엇입니까? 내가 아는 유일한 방법은 파일 nuget.config가있는 모든 솔루션의 .nuget 폴더입니다. "repositorypath value = .packages"인 경우 C : \ TFS \ Comp \ Ent \ SolABC \ .nuget \ .packages와 같은 .nuget 아래에 하위 폴더를 만듭니다. 이렇게하면 중첩 된 프로젝트 / 솔루션이 깔끔하게 해결되지 않습니다. 자동화 된 TFS 빌드에서도 작동합니다. 허용되는 답변에는 몇 가지 직접 코딩 한 작업과 "repositorypath value = $ \ .. \ .. \ .. \ Packages"가 필요합니다. 서로 다른 상대 경로를 가진 중첩 된 프로젝트가있는 경우에는 작동하지 않습니다.
hB0

2
Visual Studio 2015 및 Nuget 3.4.3에서 작동
Hüseyin Yağlı

이전 패키지를 즉시 삭제할뿐만 아니라 csproj 파일로 핸드 코드 한 HintPath를 덮어 쓰고 중단합니다. @ hB0이 맞습니다. 이것은 비교적 간단한 솔루션에서만 작동합니다. 브랜치, 공유 프로젝트 등으로 복잡한 TFS 작업 공간 구조에 들어가면 효율적으로 확장 할 수 없습니다.
gravidThoughts

20

VS 2013과 함께 NuGet 버전 2.8.50926이 있습니다. 여러 nuget.config 파일을 사용하거나 복잡한 디렉토리 구조를 사용할 필요가 없습니다. 여기에있는 기본 파일을 수정하십시오.

%APPDATA%\Roaming\NuGet\NuGet.Config

내 파일의 내용은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Projects\nugetpackages" />
  </config>
  <activePackageSource>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </activePackageSource>
</configuration>

따라서 모든 패키지는 솔루션의 위치에 관계없이 "C : \ Projects \ nugetpackages"폴더로 이동합니다.

모든 솔루션에서 기존 "패키지"폴더를 삭제하십시오. 그런 다음 솔루션을 빌드하면 NuGet은 지정된 새 중앙 디렉토리에 누락 된 패키지를 자동으로 복원합니다.


이것은 지금까지 가장 쉬운 솔루션이며 더 많은 사랑을받을 가치가 있습니다!
Korayem

2
이것이 오늘날 가장 쉬운 해결책이지만 귀하의 답변에 한 가지가 빠져 있습니다. 여전히 각 프로젝트의 csproj 파일에서 HintPath를 처리해야합니다. 새로운 경로를 자동으로 타겟팅하지 않습니다. 나 맞아?
batmaci

실제로, 나의 오래된 프로젝트 중 일부에는 때때로 "오래된"패키지 폴더에 대한 참조가 있습니다. 그러나 나를 위해 모든 것이 올바르게 작동하므로 전역 설정이 우선합니다.
Matthieu

OSX의 경우 docs.microsoft.com/en-us/nuget/consume-packages/…를 참조하십시오 . 나는 아래의 mklink 아이디어도 좋아한다.
sgtz


3

Visual Studio 2013 업데이트 4 및 Nugget Package Manager 버전> 2.8.5에서 ...

저장소의 루트에 nuget.config 파일을 작성하십시오.

파일 내용 :

<configuration>
  <config>
    <add key="repositoryPath" value="packages" />
  </config>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
</configuration>

이로 인해 모든 패키지가 nuget.config 파일 레벨의 패키지 폴더로 이동합니다.

이제 'update-package -reinstall'명령을 사용하여 각 .sln nuget 콘솔로 이동할 수 있습니다

같은 레벨에 여러 저장소가 있고 동일한 패키지 폴더를 공유하는 것이 하나의 폴더로 이동하는 방법을 사용하십시오.

 <add key="repositoryPath" value="..\packages" />

그러나이 방법으로 너겟 패키지 참조 csproj가 하나의 폴더를 저장소 경로 외부로 가리키게합니다.


3

프로젝트의 모든 NuGet 참조를 $ (SolutionDir) 상대 형식으로 투명하게 변환하는 NuGet 패키지를 작성했습니다. 빌드 타임 XSLT 변환을 사용하므로 프로젝트 파일을 직접 해킹 할 필요가 없습니다. 패키지를 자유롭게 업데이트 할 수 있습니다. 아무것도 깨지지 않습니다.

https://www.nuget.org/packages/NugetRelativeRefs

또는 Visual Studio 2015 업데이트 3을 사용하는 경우 https://oren.codes/2016/02/08/project-json-all-the-things에project.json 설명 된대로 패키지 참조를 양식으로 마이그레이션하면 됩니다.


불행히도 Microsoft가 project.json에서 멀어지고있는 것처럼 보입니다 . 또한, 나는 너겟 패키지를 좋아한다. 얼마 전에 저는 NuGetReferenceHintPathRewrite 를 사용 했는데 거의 같은 일이지만 다른 방식으로 수행됩니다
Andrey Borisko

2

너겟에 대한 내 경험 업데이트 2.8.3. 비교적 간단했습니다. 오른쪽 클릭 솔루션에서 패키지 복원 을 모두 활성화 했습니다. NuGet.Config를 편집 하고 다음 줄을 추가했습니다.

  <config>
    <add key="repositorypath" value="..\Core\Packages" />
  </config>

그런 다음 솔루션을 다시 빌드하고 모든 패키지를 원하는 폴더로 다운로드하고 참조를 자동으로 업데이트했습니다. 증분 패키지 만 다운로드하고 기존 패키지를 참조한 다른 모든 프로젝트에 대해 동일한 작업을 수행했습니다. 따라서 모든 프로젝트에 대한 공통 패키지 저장소가 설정됩니다.

다음은 패키지 복원을 활성화하는 단계별 절차입니다.

http://blogs.4ward.it/enable-nuget-package-restore-in-visual-studio-and-tfs-2012-rc-to-building-windows-8-metro-apps/


2

/ packages를 원하는 공유 위치로 하드 링크하면됩니다. 그런 다음 특별한 패키지 위치가없는 다른 사용자를 위해 프로젝트가 중단되지 않습니다.

관리자 권한으로 명령 프롬프트를 열고 사용하십시오.

mklink /prefix link_path Target_file/folder_path

2

중요한 솔루션의 경우 위의 답변이 부족합니다. 간단히 말해서, 상대 경로, 분기, 공유 프로젝트 등이 다른 복잡한 TFS 작업 공간 구조로 인해 단일 중앙 저장소가 불가능합니다.

($ SolutionDir)을 사용하는 것이 올바른 방향의 단계이지만 ($ SolutionDir)로 csproj 파일을 수동으로 코딩하면 수백 개의 패키지가 정기적으로 업데이트되는 코드베이스에서 상당히 지루해질 것입니다 (업데이트가 발생할 때마다 HintPath가 새로운 상대 경로). Update-Package -Reinstall을 실행해야 할 경우 어떻게됩니까?

NugetReferenceHintPathRewrite 라는 훌륭한 솔루션이 있습니다 . csproj 파일을 실제로 변경하지 않고 빌드 직전에 HintPaths에 ($ SolutionDir) 주입을 자동화합니다. 자동화 된 빌드 시스템에 쉽게 통합 될 수 있다고 생각합니다.


1

NuGet 버전이 포함 된 VS 2013 전문가 를 위한 간단한 요약 : 2.8.60318.667

다음은 패키지를 .nuget 폴더와 관련된 경로로 보내는 방법입니다.

<configuration>
  <config>
    <add key="repositoryPath" value="../Dependencies" />
  </config>
</configuration>

예를 들어 솔루션 (.sln 파일)이 C : \ Projects \ MySolution에있는 경우 NuGet 패키지 복원을 활성화하면 .nuget 폴더가 C : \ Projects \ MySolution.nuget과 같이 생성되고 패키지가 다운로드됩니다. C : \ Projects \ MySolution \ Dependencies와 같은 디렉토리에

참고 : "알 수없는"이유로 "repositoryPath"를 업데이트 할 때마다 변경 사항을 적용하려면 솔루션을 닫았다가 다시 열어야합니다.


닫는 구성 태그에 슬래시가 없습니다.
Moo


0

패키지 관리자로 paket을 사용하는 경우 종속성 파일에 대한 자동 심볼 링크 옵션이 있습니다.

storage: symlink

btw : 패킷은 너겟을 활용

참조 : https://fsprojects.github.io/Paket/dependencies-file.html

가능한 한 적게 수정하려면 스크립트를 사용하여 하위 디렉토리를 주기적으로 정리하면됩니다. 즉. Nuget의 기본 동작은 파일을 전역 위치에서 로컬 패키지 폴더로 복사하는 것이므로 나중에 해당 파일을 삭제하십시오.


0

NTFS 정션을 사용하여 모든 패키지 폴더를 저장소 루트 위의 단일 폴더로 지정합니다. 잘 작동합니다. 여러 솔루션에서 병렬 패키지 복원에 문제가 없습니다. 이것의 한 가지 장점은 .csproj 파일의 수백 개의 상대 힌트 경로와 같이 소스 코드에서 아무것도 재구성 할 필요가 없다는 것입니다. 파일 시스템이 단일 패키지 폴더의 리디렉션 및 시뮬레이션을 처리 할 수있게함으로써 '작동합니다'.

'git'문제를 조심하십시오. 커맨드 라인을 통한 'git status'는 비 단계적 변경 사항을 보여주지 않지만 GitKraken은 'package'정션을 비 단계적 파일 로 간주 합니다 . 클릭하면 'file is a directory'와 같은 오류가 표시됩니다. GitKraken은 또한 rebase, junction을 파괴하고 원래 파일 경로가있는 텍스트를 포함하는 실제 파일로 복원 할 경우이 '파일'을 숨기려고 시도합니다. 매우 이상한 행동. 패키지 파일 이 .gitignore에 추가되어 문제를 해결할 수도 있습니다.


-1

다음은 NuGet 2.1의 지침입니다. http://docs.nuget.org/docs/release-notes/nuget-2.1

솔루션 레벨 파일을 편집 할 필요가 없습니다.

Visual Studio 2013 및 세 가지 솔루션 공유 프로젝트와 함께 작동합니다.

솔루션 수준 NuGet (.nuget 폴더의 각 nuget.exe)을 업데이트하는 것을 잊지 마십시오.

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