包含 COM 互通元件的套件必須包含適當的 目標檔案 ,以便使用 PackageReference 格式將正確的 EmbedInteropTypes 中繼資料新增至專案。 根據預設, EmbedInteropTypes 使用 PackageReference 時,所有元件的中繼資料一律為 false,因此目標檔案會明確新增此中繼資料。 為了避免衝突,目標名稱應該是唯一的, 理想情況下,請使用您的套件名稱和內嵌組件的組合,並將下列範例中的 {InteropAssemblyName} 替換為該值。 (另請參閱 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>
請注意,當使用 packages.config 管理格式時,將套件中的元件新增為參考,會導致 NuGet 和 Visual Studio 檢查 COM 互通元件,然後在專案檔中將 EmbedInteropTypes 設為 true。 在這種情況下,目標會被覆寫。
此外,依預設,建置資源不會自動流動。 如此處所述編寫的套件在作為可轉移相依性從專案提取到專案參考時,其運作方式會有所不同。 套件取用者可以透過修改 PrivateAssets 預設值來不包含建置來允許它們流動。