Compartilhar via


Criar pacotes NuGet que contêm assemblies de interoperabilidade COM

Pacotes que contêm assemblies de interoperabilidade COM devem incluir um arquivo de destino apropriado para que os metadados EmbedInteropTypes corretos são adicionados a projetos usando o formato PackageReference. Por padrão, os metadados EmbedInteropTypes são sempre falsos para todos os assemblies quando PackageReference é usado, por isso o arquivo de destino adiciona tais metadados explicitamente. Para evitar conflitos, o nome de destino deve ser exclusivo; o ideal é usar uma combinação de nome do pacote e o assembly que está sendo inserido, substituindo o {InteropAssemblyName} no exemplo a seguir por esse valor. (Consulte também NuGet.Samples.Interop para ver um exemplo.)

<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>

Ao usar o formato de gerenciamento packages.config, adicionar referências aos assemblies dos pacotes faz com que o NuGet e o Visual Studio verifiquem os assemblies de interoperabilidade COM e defina o EmbedInteropTypes como true no arquivo de projeto. Nesse caso, os destinos são substituídos.

Além disso, por padrão, os ativos de build não fluem transitivamente. Pacotes criados conforme descrito aqui funcionam de forma diferente quando passam por pull como uma dependência transitiva de uma referência de projeto a projeto. O consumidor de pacotes pode permitir que eles fluam modificando o valor padrão de PrivateAssets para não incluir o build.