Partilhar via


Criar pacotes NuGet que contenham assemblies de interoperabilidade COM

Os pacotes que contêm assemblies de interoperabilidade COM devem incluir um arquivo de destino apropriado para que os metadados corretos EmbedInteropTypes sejam adicionados aos projetos usando o formato PackageReference. Por padrão, os EmbedInteropTypes metadados são sempre false para todos os assemblies quando PackageReference é usado, portanto, o arquivo de destino adiciona esses metadados explicitamente. Para evitar conflitos, o nome de destino deve ser exclusivo; Idealmente, use uma combinação do nome do pacote e do assembly que está sendo incorporado, substituindo o {InteropAssemblyName} no exemplo abaixo por esse valor. (Consulte também NuGet.Samples.Interop para obter 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>

Observe que, ao usar o packages.config formato de gerenciamento, adicionar referências aos assemblies dos pacotes faz com que o NuGet e o Visual Studio verifiquem se há assemblies de interoperabilidade COM e definam o EmbedInteropTypes como true no arquivo de projeto. Neste caso, as metas são anuladas.

Além disso, por padrão, os ativos de compilação não fluem transitivamente. Os pacotes criados conforme descrito aqui funcionam de forma diferente quando são puxados como uma dependência transitiva de um projeto para uma referência de projeto. O consumidor do pacote pode permitir que eles fluam modificando o valor padrão de PrivateAssets para não incluir compilação.