Membuat paket NuGet yang berisi rakitan interop COM
Paket yang berisi rakitan interop COM harus menyertakan file target yang sesuai sehingga metadata yang benar EmbedInteropTypes
ditambahkan ke proyek menggunakan format PackageReference. Secara default, EmbedInteropTypes
metadata selalu salah untuk semua rakitan saat PackageReference digunakan, sehingga file target menambahkan metadata ini secara eksplisit. Untuk menghindari konflik, nama target harus unik; idealnya, gunakan kombinasi nama paket Anda dan perakitan yang disematkan, menggantikan {InteropAssemblyName}
dalam contoh di bawah ini dengan nilai tersebut. (Lihat juga NuGet.Samples.Interop misalnya.)
<Target Name="Embedding**AssemblyName**From**PackageId**" AfterTargets="ResolveReferences" BeforeTargets="FindReferenceAssembliesForReferences">
<ItemGroup>
<ReferencePath Condition=" '%(FileName)' == '{InteropAssemblyName}' AND '%(ReferencePath.NuGetPackageId)' == '$(MSBuildThisFileName)' ">
<EmbedInteropTypes>true</EmbedInteropTypes>
</ReferencePath>
</ItemGroup>
</Target>
Perhatikan bahwa saat menggunakan packages.config
format manajemen, menambahkan referensi ke rakitan dari paket menyebabkan NuGet dan Visual Studio memeriksa rakitan interop COM dan mengatur EmbedInteropTypes
ke true dalam file proyek. Dalam hal ini, target ditimpa.
Selain itu, secara default aset build tidak mengalir secara transitif. Paket yang ditulis seperti yang dijelaskan di sini berfungsi secara berbeda ketika ditarik sebagai dependensi transitif dari proyek ke referensi proyek. Konsumen paket dapat memungkinkan mereka mengalir dengan memodifikasi nilai default PrivateAssets untuk tidak menyertakan build.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk