Vytvoření balíčků NuGet obsahujících sestavení zprostředkovatele komunikace s objekty COM
Balíčky, které obsahují sestavení zprostředkovatele komunikace s objekty COM, musí obsahovat odpovídající soubor cílů, aby byla do projektů přidána správná EmbedInteropTypes
metadata pomocí formátu PackageReference. Ve výchozím nastavení EmbedInteropTypes
jsou metadata vždy false pro všechna sestavení při použití PackageReference, takže cílový soubor přidá tato metadata explicitně. Aby nedocházelo ke konfliktům, měl by být cílový název jedinečný; v ideálním případě použijte kombinaci názvu balíčku a sestavení, které je vloženo, a nahraďte {InteropAssemblyName}
v následujícím příkladu danou hodnotou. (Viz také Příklad: 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>
Všimněte si, že když používáte packages.config
formát správy, přidání odkazů na sestavení z balíčků způsobí, že NuGet a Visual Studio zkontrolují sestavení zprostředkovatele komunikace modelu COM a nastaví EmbedInteropTypes
v souboru projektu hodnotu true. V tomto případě jsou cíle přepsány.
Prostředky sestavení navíc ve výchozím nastavení neprotékají tranzitivně. Balíčky vytvořené podle popisu zde fungují jinak, když se načte jako tranzitivní závislost z projektu do odkazu na projekt. Příjemce balíčku mu může umožnit tok úpravou výchozí hodnoty PrivateAssets tak, aby nezahrnoval sestavení.