.nuget 폴더를 버전 관리에 추가해야합니까?


107

최신 버전의 NuGet에서는 packages폴더가 소스 코드 리포지토리에 포함될 필요가 없도록 NuGet 패키지를 자동으로 복원하도록 프로젝트를 구성 할 수 있습니다. 좋은.

그러나이 명령은 새 .nuget폴더를 추가 하고 여기에 바이너리 NuGet.exe가 있습니다. 이것은 또한 Visual Studio에서 자동으로 다시 만들 수 있으므로 버전 제어에 추가하는 것이 올바르지 않습니다. 그러나이 폴더가 없으면 Visual Studio가 솔루션을 제대로로드하지도 않습니다.

사람들은 이것을 어떻게 처리합니까? 소스 제어에 .nuget을 추가 하시겠습니까? 솔루션을 열기 전에 명령 줄 스크립트를 실행 하시겠습니까?


이것은 가장 확실한 링크 docs.nuget.org/docs/workflows/… 이며 오래된 스레드이기 때문입니다. 내가 코멘트의 정보를 공유 할 수있는 것 만 같은 ...
나비 드 버트

답변:


47

이 게시물은 오래되었으며 더 이상 솔루션 수준 NuGet 패키지 복원을 사용해서는 안됩니다. 버전 2.7 이상부터 NuGet 설정에 빌드시 패키지를 자동으로 복원하는 옵션이 있습니다. 따라서 .nuget 폴더를 삭제하고 프로젝트에서 옵션을 제거 할 수 있습니다.

http://docs.nuget.org/docs/reference/package-restore

업데이트 : NuGet 4.x 및 .NET Standard 2.0 릴리스와 함께 새로운 csproj 형식을 사용할 때 이제 패키지 참조를 사용할 수 있습니다. 아이러니하게도 패키지를 복원하기 위해 msbuild에 대한 종속성을 다시 도입했지만 이제 패키지는 msbuild의 첫 번째 클래스 시민입니다. . 위의 링크에서도을 언급 PackageReference하지만 다음 발표에서 더 자세히 설명합니다.

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

그리고 아이러니하게도 그다지 유용하지 않은 NuGet 4.x RTM 발표 :

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

업데이트 2 : 분명히 VS2017을 사용하면 클래식 csproj 프로젝트에서 패키지 참조를 사용할 수도 있지만 더 이상 이전 버전과 호환되지 않으며 패키지 하위 종속성을 복원하는 데 몇 가지 문제가있었습니다. 나는 그것이 모두 해결 될 것이라고 확신합니다.



@CAD Bloke, 네, 하단의 읽기 목록에 있습니다. 범위를 좁혀 주셔서 감사합니다.
Jeremy

.NET을 사용하여 VS에서 Nuget을 쉽게 업데이트 할 수 있습니다 Tools > Extensions & Updates > Updates.
jocull

47

@Richard Szalay의 대답이 옳습니다-nuget.exe를 커밋 할 필요가 없습니다. 어떤 이유로 Visual Studio가 nuget.exe를 자동으로 다운로드하지 않는 경우 파일 에서 다음을 true 로 설정했는지 확인 nuget.targets합니다.

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

VS 솔루션을 닫고 다시 열고 빌드하십시오. 이제 Visual Studio에서 nuget.exe를 자동으로 다운로드해야합니다.


그건 그렇고, true기본적으로 설정되지 않은 이유를 아는 사람이 있습니까?
ajukraine 2013-04-05

2
프라이버시 문제에 가깝습니다. "인터넷을 통해 요청을하는 간단한 작업으로 사용자에 대한 정보를 공개 할 수 있습니다 (예 : 사용자의 IP 주소에서 그녀의 위치를 ​​추정 할 수 있음)." Nuget 블로그에서 패키지 복원 및 동의 문서를
Gan

1
참고 : NuGet.exe가 .nuget 폴더에 없으면 NuGet 패키지 복원이 이미 구성되어 있어도 솔루션의 상황에 맞는 메뉴에 "NuGet 패키지 복원 활성화"가 표시됩니다. 빌드 후 옵션이 사라집니다.
comecme

이것은 받아 들여진 대답이어야합니다. IMO ... NuGet.exe가 매우 작다면 소스 제어에 붙이고 무시 파일에서해야 할 일을 처리 할 수 ​​있습니다. 그러나 그것은 1.5 메가, 그것은 내가 항상 Gan의 방식으로 할만 큼 충분히 큽니다.
Brian MacKay 2014 년

nuget.exe 양식은 어디에서 다운로드합니까? 내 빌드 서버에 인터넷이 없으면 어떻게합니까?
bitbonk


20

커밋 할 필요가 .nuget\nuget.targets있지만 그렇지 않습니다 nuget.exe. 대상은 nuget.targets에서로 변경 DownloadNuGetExe하는 한 존재하지 않는 경우 exe를 다운로드합니다.true


4

일반적으로 소스 제어에 exe를 추가하는 아이디어가 마음에 들지 않지만 소스 제어에는 프로젝트를 열고 빌드하고 실행하는 데 필요한 모든 것이 포함되어야합니다.

이 경우 .nuget 폴더가 필수 종속성 인 것처럼 들립니다. 따라서 소스 제어하에 있어야합니다.

조사해야 할 유일한 질문은 해당 폴더가 읽기 전용으로 표시되어있는 경우 NuGet이 어떻게 반응할지, TFS가 체크인 한 후 수행 할 작업입니다.


업데이트 : 이전에 NuGet을 사용한 적이 없기 때문에 이에 대해 조금 더 조사했습니다. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

아마도 당신이 원하는 것은 NuGet을 모든 개발자 워크 스테이션에 설치해야하는 요구 사항으로 만드는 것입니다.

또한 워크 스테이션에서 프로젝트 편집을 시작할 준비를하는 데 필요한 배치 파일을 소스 제어에 배치해야합니다. 배치 파일은 종속성 패키지를 가져오고 설치하는 데 필요한 명령을 실행합니다.

그 외에도 NuGet에 직접 연락하여 정확히 어떻게 작동하는지 물어볼 수 있습니다.


1
<RestorePackages>true</RestorePackages>* .csproj 파일에 Visual Studio에 대한 충분한 정보가 있어야 한다고 생각 했지만 그렇지 않을 수도 있습니다.
Borek Bernard 2012

1

이제 nuget이 패키지 복원을 지원하므로 더 자세히 살펴 보겠습니다.

우리는 소스 제어를 위해 Subversion을 사용하고, 저의 초기 생각은 .nuget저장소에 추가해야하지만 단일 위치를 가리 키도록 svn : externals를 사용하여 추가 하는 것입니다.

이렇게하면 모든 개발자와 프로젝트에 새 버전을 자동으로 푸시 할 수 있습니다. HEAD가 아닌 릴리스 브랜치에있는 프로젝트의 경우, nuget을 그대로 두려면 svn : externals 참조 의 개정을 지정할 수 있습니다 .

프로젝트가 많기 때문에 nuget.exe저장소에서 여러 번 복제하지 않는 것도 의미 합니다.


NuGet에서 외부 프로젝트 패키지를 복원 할 수 없습니다. 이것이 당신을 위해 일했습니까?.
Doguhan Uluca 2012

예, 비록 NuGet.exe가 로컬 리포지토리 (IIS 6 + SSL + AD 인증)에 인증하는 데 문제가있는 것 같지만 Powershell 또는 Extension Plugin이 제대로 작동합니다.
si618

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