2017-04-25 2 views
0

저는 다른 여러 것들에 의존하는 너겟 패키지를 가지고 있습니다 (예 : Newtonsoft.Json). 패키지는 패키지의 구조가 같다, 그래서 그것은 단지 사용자의 MSBuild 작업을 추가하는 클래스 라이브러리로 사용하기위한 것이 아닙니다 : 너겟 패키지에서 너겟 패키지를 참조하십시오.

-package CustomBuildAction 
|-lib/net45/CustomBuildAction.dll 
|-build/CustomBuildAction.targets 

내가 패키지 CustomBuildAction.targets를 설치

가 제대로 csproj에서 referensed 되나 난 경우 빌드를 실행하려고하면 다음 오류가 발생합니다.

"customBuildAction"작업을 "path to dll/CustomBuildAction.dll"어셈블리에서로드 할 수 없습니다. 파일 또는 어셈블리 'Newtonsoft.Json.dll, Version = ...'또는 해당 종속성 중 하나를로드 할 수 없습니다.

패키지 종속성으로 nuspec 파일에 Newtonsoft.Json.dll을 포함 시켰습니다. nuget은 종속성으로 표시하지만 MSBuild는이를 해결할 수 없습니다.

../lib/net45/CustomBuildAction.dll 

그러나이 DLL이 없습니다 배치 할 :이 문제처럼 보이는 나를 위해하는 것은 나는, 패키지 폴더 (폴더를 구축 할 상대) 상대 경로를 사용 .targets 파일에서 CustomBuildAction.dll을 참조하고있어 예이다 모든 종속성을 찾을 수있는 빌드 출력 폴더에 저장합니다. 이 문제를 어떻게 해결할 수 있습니까? 패키지에 종속성을 포함시켜야합니까? 아니면 해결할 다른 방법이 있습니까?

+0

사용자 지정 MSBuild 동작에서만 사용되는 경우 프로젝트에서 CustomBuildAction.dll을 참조해야합니까? 나는 단지 .targets 파일 옆의 빌드 디렉토리에 그것을 가지고 그것을 거기에서 가져올 것이다. 그런 다음 Newtonsoft.Json.dll 빌드 디렉토리에 있습니다. –

+0

@Matt Ward 아니오, 프로젝트에 참조로 추가 할 필요가 없습니다. DLL을 빌드 폴더, 재미있는 아이디어로 이동 시키려고 할 것인가? – Leo

답변

0

MSBuild는 작업 어셈블리가 포함 된 폴더에서 작업 종속성을 해결합니다. 안타깝게도 NuGet 패키지에 CustomBuildAction.dll 파일과 함께 Newtonsoft.Json.dll을 포함해야합니다.

어셈블리가 빌드 출력에서 ​​끝나지 않게하려면 어셈블리를 패키지의 다른 폴더에 넣습니다. 예를 들어, lib/lib에 없으면 참조 할 수있는 어셈블리로 처리되지 않습니다.

관련 문제