Copy대상 파일 의 대상을 사용하여 필요한 라이브러리를 복사하면 해당 파일을 프로젝트를 참조하는 다른 프로젝트로 복사하지 않으므로 결과는 DllNotFoundException입니다. 그러나 NoneMSBuild는 모든 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디렉토리에 필요한 파일을 직접 포함시킬 수 있습니다 . 다른 필수 컨텐츠 파일도 같은 방식으로 추가 할 수 있습니다.
NoneVisual Studio에서 열 때 대상 파일 과 같이 추가 된 파일은 프로젝트에 표시되지 않습니다. Contentnupkg 에서 폴더를 사용하지 않는 이유가 궁금한 경우 powershell 스크립트를 사용하지 않고CopyToOutputDirectory 요소 를 설정할 수있는 방법이 없기 때문입니다 (명령 프롬프트가 아닌 Visual Studio 내에서 빌드 서버 또는 서버에서 실행됩니다) 다른 IDE를 사용하고 project.json / xproj DNX 프로젝트에서 지원되지 않음 ) 프로젝트 에서 파일의 추가 사본 을 사용하는 대신 파일에 a 를 사용하는 것을 선호합니다 .Link
업데이트 :
비록이해야 또한 작업 Content보다는 None이 파일이 한 단계가 제거보다 더 참조하는 프로젝트에 복사되지 않도록 MSBuild에서에서 문제가 있음을 표시 (예를 들어으로 Proj1 -> proj2 -> proj3, proj3는 파일을받지 않습니다 proj1의 NuGet 패키지에서 있지만 proj2는 것입니다.