Erstellen von NuGet-Paketen, die COM-Interop-Assemblys enthalten

Pakete, die COM-Interop-Assemblys enthalten, müssen eine entsprechende Zieledatei enthalten, damit die richtigen EmbedInteropTypes-Metadaten zu Projekten hinzugefügt werden, die das Format „PackageReference“ verwenden. Die EmbedInteropTypes-Metadaten sind für alle Assemblys immer FALSE, wenn „PackageReference“ verwendet wird, damit die Zieledatei diese Metadaten explizit hinzufügt. Um Konflikte zu vermeiden, sollte der Name des Ziels eindeutig sein. Verwenden Sie am besten eine Kombination aus dem Paketnamen und der Assembly, die eingebettet wird, und ersetzen Sie {InteropAssemblyName} im folgenden Beispiel durch diesen Wert. Ein weiteres Beispiel finden Sie unter 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>

Hinweis: Wenn Sie das packages.config-Verwaltungsformat verwenden, prüfen NuGet und Visual Studio beim Hinzufügen von Verweisen zu den Assemblys aus Paketen auf COM-Interop-Assemblys und legen EmbedInteropTypes in der Projektdatei auf TRUE fest. In diesem Fall werden die Ziele außer Kraft gesetzt.

Darüber hinaus werden die Buildressourcen standardmäßig nicht transitiv weitergeben. Pakete, die dieser Beschreibung nach erstellt werden, funktionieren anders, wenn sie als transitive Abhängigkeit aus einem Projekt in einen Projektverweis gezogen werden. Der Paketbenutzer kann die Weiterleitung zulassen, indem er den Standardwert „PrivateAssets“ so ändert, dass „build“ nicht enthalten ist.