Dela via


Skapa NuGet-paket som innehåller COM-interop-sammansättningar

Paket som innehåller COM-interop-sammansättningar måste innehålla en lämplig målfil så att rätt EmbedInteropTypes metadata läggs till i projekt med formatet PackageReference. Som standard är EmbedInteropTypes metadata alltid falska för alla assemblies när PackageReference används, så den målinriktade filen lägger uttryckligen till dessa metadata. För att undvika konflikter bör målnamnet vara unikt. Använd helst en kombination av ditt paketnamn och sammansättningen som bäddas in, och {InteropAssemblyName} ersätt i exemplet nedan med det värdet. (Se även NuGet.Samples.Interop för ett exempel.)

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

Observera att när du använder packages.config hanteringsformatet gör tillägg av referenser till sammansättningarna från paketen att NuGet och Visual Studio söker efter COM-interop-sammansättningar och anger EmbedInteropTypes värdet true i projektfilen. I det här fallet åsidosättas målen.

Dessutom flödar byggtillgångarna som standard inte transitivt. Paket som har skapats enligt beskrivningen här fungerar annorlunda när de hämtas som ett transitivt beroende från ett projekt till en projektreferens. Paketkonsumenten kan tillåta att de flödar genom att ändra standardvärdet PrivateAssets så att det inte inkluderar build.