[visual-studio] .nuget 폴더를 버전 관리에 추가해야합니까?

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

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

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



답변

이 게시물은 오래되었으며 더 이상 솔루션 수준 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 프로젝트에서 패키지 참조를 사용할 수도 있지만 더 이상 이전 버전과 호환되지 않으며 패키지 하위 종속성을 복원하는 데 몇 가지 문제가있었습니다. 나는 그것이 모두 해결 될 것이라고 확신합니다.


답변

@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를 자동으로 다운로드해야합니다.


답변

이 스레드 에 따르면 .nuget 폴더는 버전을 제어해야합니다.


답변

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


답변

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

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

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


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

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

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

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


답변

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

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

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

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


답변

우리는이 nuget.config이 패키지 소스 영역을 사용, 내부 Nuget 서버에 참조가 같은 폴더에있는 파일을 :
https://docs.nuget.org/consume/nuget-config-settings

이러한 이유 외에도 Visual Studio에서 패키지 다운로드를 처리하도록해야합니다.