이 프로젝트를 빌드해야하며 일부 이상한 습관이 필요합니다. 그들은 다른 프로젝트의 빌드 프로세스의 결과로 생성 된 링크 된 코드 파일에 의존합니다. 이 프로젝트는 하위 폴더에 있습니다.Resolve .NET 4.7 외부 프로젝트 MSBuild 대상을 통한 NuGet 종속성
따라서 프로젝트를 빌드하기 전에 하위 프로젝트를 빌드해야합니다. 이것은 각 프로젝트의 BeforeBuild 타겟에 사용자 정의 빌드 타겟을 추가함으로써 이루어지며 작동하는 것 같습니다. 그러나 하위 프로젝트는 NuGet 종속성을 복원하지 않고 빌드하지 않습니다.
분명히하기 :이 패턴은 완전히 불쾌감을 안겨주지 만이 패턴을 사용하는 모든 프로젝트를 리팩터링하는 인력은 없습니다. 우리는 단지 한 단계로 안정적으로 컴파일 할 수 있도록 노력하고 있습니다.
이러한 외부 프로젝트 종속성의 각
은과 같이, 사용자 정의 ItemGroup에 나열되어 있습니다 : 우리는 사용자 지정 각 프로젝트의 BeforeBuild 대상에서 호출 빌드 대상 추가하여이 문제를 해결하기 위해 노력했습니다<ItemGroup> <ExternalDependantProjects Include= "..\<subfolder>\<project>\<project>.csproj" /> </ItemGroup>
. 먼저 ResolveNuGetPackageAssets를 빌드 타겟으로 사용해 보았지만 net47을 타겟팅하는 동안 netcore에서만 지원된다는 사실을 발견했습니다.
이제 외부 프로젝트의 NuGet 종속성을 복원하는 사용자 정의 빌드 대상을 작성하려고합니다. <Exec Command="nuget restore @(ExternalDependantProjects)" />
과 다소 복잡한 & 해키 PowerShell을 시도 : <Exec Command="powershell.exe -command "'@(ExternalDependantProjects, '' '')' | foreach { nuget restore $_ }"" />
단순히 주요 프로젝트가 아닌 외부 프로젝트의 패키지를 복원하려고 두 경우 모두 우리는 지금처럼 똑바로 앞으로 접근을 시도했습니다. @ (ExternalDependantProjects)는 공백과 같으므로 새 인수가 추가되지 않습니다. using을 사용하면 @ (ExternalDependantProjects)가 아무 것도 반환하지 않는다는 것을 알 수 있습니다. 그러나 MSBuild "빌드"대상을 호출 할 때 "프로젝트"매개 변수로 작동합니다. 그래서 우리는 잘못된 방식으로 Item 매개 변수를 사용하고 있다고 의심합니다. 아이템의 Include 속성에 접근하는 문법이 있을까요?
그러나 문제를 해결할 수 있다면 제대로 작동하는지 확신 할 수 없습니다. 하위 프로젝트에서 nuget restore 명령을 사용하여 테스트했으며 package.conf의 모든 패키지가 설치되었다는 응답을 항상받습니다. 그러나 외부 프로젝트의 \ packages \는 비어 있고 packages.conf에는 6 개의 패키지가 지정되어 있습니다 (VS의 "References"에도 누락되어 있으며 참조의 HintPath는 .. \ packages로 올바르게 이동합니다).
우리는 세 가지면에서 혼란 스럽습니다. MSBuild 대상에서 ExternalDependentProjects Item include 경로를 참조하려면 어떻게해야합니까? NuGet CLI를 복원하지 않는 이유는 무엇이며이 문제를 해결하는 올바른 방법이기도합니다. ? 우리가 완전히 잘못된 길로 내려 갔습니까?
이 해킹해야 할 이유가 명확하지 않다. 그냥 다른 프로젝트와 마찬가지로 정상적인 프로젝트로 만듭니다. 당신이해야 할 일은 그것이 다른 것들보다 먼저 만들어 지는지 확인하는 것입니다. MSBuild는 아마도 스스로 알아낼 수 없으므로 도움을 받아야 할 것입니다. 솔루션 노드를 마우스 오른쪽 단추로 클릭하고 프로젝트 종속성을 선택하십시오. –
@ 얀 스키 (Jansky),이 문제는 어떻습니까? 이 문제가 해결 되었습니까? 그렇지 않은 경우이 문제에 대한 최신 정보를 알려주십시오. –
헤이 @ 레오 - MSFT, 나는 당신의 응답에 넣은 모든 노력에 정말로 감사드립니다. 그것은 나에게 해결책을 향한 좋은 몇 가지 실을주었습니다. 그러나 나는 다른 프로젝트로 옮겼습니다. 언제 해결할 시간이 있는지 확신 할 수 없습니다. 어쨌든 나는 지금 너를 대답으로 표시 할 것이다. – Jansky