Kullanma Copy
hedefler 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
. None
MSBuild tüm None
dosyaları 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ı build
gerekli yerel kitaplıklarla birlikte nuget paketinin dizinine ekleyin. Hedefler dosyası, dll
dizinin 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 x86
ve x64
sürümünü eklemek Any CPU
iç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ı x86
ve x64
dizinler, 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ı build
doğrudan dizine ekleyebilir . Diğer gerekli içerik dosyaları da aynı şekilde eklenebilir.
None
Hedefler dosyasında olduğu gibi eklenen dosyalar , Visual Studio'da açıldığında projede gösterilmez. Content
Klasö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 Content
yerine None
bununla 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).