Aracılığıyla paylaş


COM birlikte çalışma derlemeleri içeren NuGet paketleri oluşturma

COM birlikte çalışma derlemeleri içeren paketler, PackageReference biçimi kullanılarak projelere doğru EmbedInteropTypes meta verilerin eklenmesi için uygun bir hedef dosyası içermelidir. Varsayılan olarak, EmbedInteropTypes PackageReference kullanıldığında meta veriler tüm derlemeler için her zaman false olur, bu nedenle hedefler dosyası bu meta verileri açıkça ekler. Çakışmaları önlemek için hedef adın benzersiz olması gerekir; ideal olarak, aşağıdaki örnekteki öğesini bu değerle değiştirerek {InteropAssemblyName} paket adınızın ve eklenmiş olan derlemenin bir bileşimini kullanın. (Ayrıca bkz. Bir örnek için NuGet.Samples.Interop .)

<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>

Yönetim biçimini kullanırken packages.config , paketlerden derlemelere başvurular eklenmesinin NuGet ve Visual Studio'ya COM birlikte çalışma derlemelerini denetlemesine ve proje dosyasında true olarak ayarlanmasına EmbedInteropTypes neden olduğunu unutmayın. Bu durumda hedefler geçersiz kılınmış olur.

Ayrıca, varsayılan olarak derleme varlıkları geçişli olarak akış yapmaz. Burada açıklandığı gibi yazılan paketler, bir projeden proje başvurusuna geçişli bağımlılık olarak çekildiğinde farklı çalışır. Paket tüketicisi, PrivateAssets varsayılan değerini derlemeyi içermeyecek şekilde değiştirerek akış yapmalarına izin verebilir.