Tworzenie pakietów NuGet zawierających zestawy międzyoperacowe modelu COM

Pakiety zawierające zestawy międzyoperacyjne MODELU COM muszą zawierać odpowiedni plik docelowy, aby poprawne EmbedInteropTypes metadane były dodawane do projektów przy użyciu formatu PackageReference. Domyślnie EmbedInteropTypes metadane są zawsze fałszywe dla wszystkich zestawów, gdy jest używana funkcja PackageReference, więc plik targets jawnie dodaje te metadane. Aby uniknąć konfliktów, nazwa docelowa powinna być unikatowa; najlepiej użyć kombinacji nazwy pakietu i zestawu, który jest osadzony, zastępując element {InteropAssemblyName} w poniższym przykładzie tą wartością. (Zobacz teżPrzykład 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>

Należy pamiętać, że w przypadku korzystania z packages.config formatu zarządzania dodanie odwołań do zestawów z pakietów powoduje, że pakiety NuGet i Visual Studio sprawdzają zestawy międzyoperacyjności modelu COM i ustawiają EmbedInteropTypes wartość true w pliku projektu. W takim przypadku obiekty docelowe są zastępowane.

Ponadto domyślnie zasoby kompilacji nie przepływają przechodnio. Pakiety utworzone zgodnie z opisem w tym miejscu działają inaczej, gdy są pobierane jako zależność przechodnia od projektu do odwołania do projektu. Odbiorca pakietu może zezwolić im na przepływ, modyfikując wartość domyślną PrivateAssets, aby nie uwzględniała kompilacji.