Copy
대상 파일 의 대상을 사용하여 필요한 라이브러리를 복사하면 해당 파일을 프로젝트를 참조하는 다른 프로젝트로 복사하지 않으므로 결과는 DllNotFoundException
입니다. 그러나 None
MSBuild는 모든 None
파일을 참조하는 프로젝트에 복사 하므로 요소를 사용하여 훨씬 간단한 대상 파일로 수행 할 수 있습니다 .
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<NativeLibs Include="$(MSBuildThisFileDirectory)**\*.dll" />
<None Include="@(NativeLibs)">
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
build
필요한 기본 라이브러리와 함께 nuget 패키지 의 디렉토리에 대상 파일을 추가하십시오 . 대상 파일은 dll
디렉토리의 모든 하위 디렉토리에있는 모든 파일을 포함합니다 build
. 따라서 관리되는 어셈블리에서 사용하는 기본 라이브러리의 버전 x86
과 x64
버전 을 추가 Any CPU
하려면 다음과 유사한 디렉토리 구조가 생깁니다.
- 짓다
- x86
- NativeLib.dll
- NativeLibDependency.dll
- x64
- NativeLib.dll
- NativeLibDependency.dll
- MyNugetPackageID.targets
- lib
같은 x86
과 x64
내장 할 때 디렉토리는 프로젝트의 출력 디렉토리에 생성됩니다. 하위 디렉토리가 필요하지 않은 경우 **
및 디렉토리를 %(RecursiveDir)
제거하고 build
디렉토리에 필요한 파일을 직접 포함시킬 수 있습니다 . 다른 필수 컨텐츠 파일도 같은 방식으로 추가 할 수 있습니다.
None
Visual Studio에서 열 때 대상 파일 과 같이 추가 된 파일은 프로젝트에 표시되지 않습니다. Content
nupkg 에서 폴더를 사용하지 않는 이유가 궁금한 경우 powershell 스크립트를 사용하지 않고CopyToOutputDirectory
요소 를 설정할 수있는 방법이 없기 때문입니다 (명령 프롬프트가 아닌 Visual Studio 내에서 빌드 서버 또는 서버에서 실행됩니다) 다른 IDE를 사용하고 project.json / xproj DNX 프로젝트에서 지원되지 않음 ) 프로젝트 에서 파일의 추가 사본 을 사용하는 대신 파일에 a 를 사용하는 것을 선호합니다 .Link
업데이트 :
비록이해야 또한 작업 Content
보다는 None
이 파일이 한 단계가 제거보다 더 참조하는 프로젝트에 복사되지 않도록 MSBuild에서에서 문제가 있음을 표시 (예를 들어으로 Proj1 -> proj2 -> proj3, proj3는 파일을받지 않습니다 proj1의 NuGet 패키지에서 있지만 proj2는 것입니다.