建立包含 COM Interop 組件的 NuGet 套件
包含 COM Interop 組件的套件必須包含適當的目標檔案,因此會使用 PackageReference 格式將正確的 EmbedInteropTypes
中繼資料新增至專案。 根據預設,使用 PackageReference 時,所有組件的 EmbedInteropTypes
中繼資料一律為 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 Interop 組件,並將專案檔中的 EmbedInteropTypes
設定為 true。 在此情況下,會覆寫目標。
此外,根據預設,組建資產不會轉移流動。 如這裡所述而撰寫的套件從專案對專案參考提取為可轉移相依性時,即會以不同的方式運作。 套件取用者允許它們流動的方式,是將 PrivateAssets 預設值修改為不包含組建。