次の方法で共有


COM 相互運用機能アセンブリを含む NuGet パッケージを作成する

COM 相互運用機能アセンブリを含むパッケージには、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 相互運用機能アセンブリがチェックされ、プロジェクト ファイルでEmbedInteropTypesが true に設定されることに注意してください。 この場合、ターゲットはオーバーライドされます。

また、既定では、 ビルドアセットは推移的に流れるわけではありません。 ここで説明するように作成されたパッケージは、プロジェクトからプロジェクト参照への推移的な依存関係としてプルされると、動作が異なります。 パッケージ コンシューマーは、PrivateAssets の既定値を変更してビルドを含めないようにすることで、それらをフローさせることができます。