2017-09-26 4 views
1

내 프로젝트에서 참조되는 콘텐츠 파일이 포함 된 NuGet 패키지가 있습니다. NuGet Restore가 컨텐트 파일을 복사하지 않기 때문에 새 시스템에서 최신 정보를 얻으면 빌드가 실패합니다. 내가 인해 Nuget 파일의 버전 관리 및 nuget에 도착 액세스 경로의 차이를 결정하는 사투를 벌인거야프로젝트의 미리 빌드 이벤트에서 Nuget 패키지 버전 및 경로를 확인하는 방법?

In PreBuild 
If my Content file doesn't exist, 
    run this nuget Command: "Update-Package My.Nuget.Sources -reinstall" 

: 그래서 내가하고 싶은 것은 이것이다. 아래에서 SourceOnlyNugetVersionNugetPath 개의 변수를 실제로 어떻게 생성합니까?

if not exist "$(ProjectFolder)App_Packages\My.NuGet.Sources.$(SourceOnlyNugetVersion?)\somefile.cs" (
    "$(NugetPath)nuget.exe" Update-Package My.NuGet.Sources -reinstall   
) 

답변

2

어떻게 프로젝트의 빌드 전 이벤트에 Nuget 패키지 버전 및 경로를 해결하기 위해?

사전 빌드 이벤트에서 패키지를 자동으로 다시 설치하려면 현재이를 수행 할 수 없습니다.

패키지 관리자 콘솔에서 Update-Package -Id <package_name> –reinstall 명령을 사용하여 패키지를 프로젝트에 다시 설치할 수 있지만 은 불가능합니다.이 작업을 자동화하려면을 사용할 수 없습니다.

빌드 이벤트에서 자동화하려는 경우 패키지 관리자 콘솔이 아닌 NuGet CLI를 호출해야합니다. NuGet CLI가 프로젝트 파일이나 packages.config를 수정하지 않기 때문에; 이런 방식으로 패키지를 디스크에 추가하는 것만 큼 복원과 비슷하지만 은 프로젝트의 종속성을 변경하지 않습니다. NuGet CLI reference을 참조하십시오.

동작 NuGet CLI에 패키지를 설치

enter image description here

반대로, 작업은 패키지 관리자에서 패키지를 설치합니다

는 프로젝트에 패키지 및 패키지 종속성을 설치합니다.

그래서 NuGet CLI를 사용하여 프로젝트에 NuGet 패키지를 다시 설치할 수 없었습니다.

게다가 패키지 관리자 콘솔이 제공하는 비주얼 스튜디오 객체에 대한 액세스이기 때문에 비주얼 스튜디오 외부에서 패키지 관리자 콘솔 powershell을 사용할 수 없습니다.

https://github.com/NuGet/Home/issues/1512

마찬가지로, 우리는 빌드가 명령 줄에서 실행할 때 작동해야하므로 이벤트가 MSBuild에 의해 운영되며 구축, 빌드 이벤트 패키지 관리자 콘솔을 사용하여 없습니다.

NuGet 패키지를 자동 설치하는 것이 불가능하거나 NuGet.Core.dll을 사용하는 콘솔 응용 프로그램을 작성하여 PowerShell 스크립트가 수행하는 것과 동일한 작업을 수행 할 수 있습니다.

+0

원본 전용 패키지를 사용하고 있기 때문에 콘텐츠 파일을 설치하기 만하면됩니다. 이 작업을 수행하기 위해 EXE를 만들었습니다 : https://github.com/daryllabar/DLaB.Xrm.XrmToolBoxTools/raw/master/References/NuGetContentInstaller.exe SolutionDirectory 및 ProjectPath로 사전 빌드에서 호출해야합니다. 매개 변수 – Daryl