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.