Kullanma Copyhedefler dosyasında hedef gerekli kütüphaneleri bir sonuçlanan proje başvurmak diğer projeler için bu dosyaları kopyalamak olmaz kopyalamak için DllNotFoundException. NoneMSBuild tüm Nonedosyaları referans projelerine kopyalayacağından, bu çok daha basit bir hedef dosyasıyla, bir öğe kullanılarak yapılabilir .
<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>
Hedefler dosyasını buildgerekli yerel kitaplıklarla birlikte nuget paketinin dizinine ekleyin. Hedefler dosyası, dlldizinin tüm alt dizinlerindeki tüm dosyaları içerecektir build. Dolayısıyla, yönetilen bir derleme tarafından kullanılan yerel bir kitaplığın bir x86ve x64sürümünü eklemek Any CPUiçin aşağıdakine benzer bir dizin yapısına sahip olursunuz:
- inşa etmek
- x86
- NativeLib.dll
- NativeLibDependency.dll
- x64
- NativeLib.dll
- NativeLibDependency.dll
- MyNugetPackageID.targets
- lib
Aynı x86ve x64dizinler, inşa edildiğinde projenin çıktı dizininde oluşturulacaktır. Alt dizinlere ihtiyacınız yoksa, o zaman **ve %(RecursiveDir)kaldırılabilir ve bunun yerine gerekli dosyaları builddoğrudan dizine ekleyebilir . Diğer gerekli içerik dosyaları da aynı şekilde eklenebilir.
NoneHedefler dosyasında olduğu gibi eklenen dosyalar , Visual Studio'da açıldığında projede gösterilmez. ContentKlasörü nupkg'da neden kullanmadığımı merak ediyorsanız , bunun nedeni bir powershell betiği kullanmadanCopyToOutputDirectory öğeyi ayarlamanın bir yolu olmamasıdır (bu, komut isteminde, derleme sunucularında veya içinde değil, yalnızca Visual Studio içinde çalıştırılır) diğer IDE'ler ve project.json / xproj DNX projelerinde desteklenmiyor ) ve proje içindeki dosyaların ek bir kopyasına sahip olmak yerine dosyalara a kullanmayı tercih ediyorum .Link
Güncelleme:
Bu , msbuild'de bir hata varmış gibi görünmek Contentyerine Nonebununla da çalışmalıdır, böylece dosyalar birden fazla adım kaldırılan projelere başvurmak için kopyalanmaz (örn. Proj1 -> proj2 -> proj3, proj3 dosyaları almaz proj1'in NuGet paketinden ancak proj2 olacaktır).