2011-05-17 18 views
16

¿Es posible utilizar NuGet para distribuir una DLL COM?¿Puede NuGet distribuir un dll COM?

¿Cómo configuro el paquete?

Estoy pensando que podría poner el archivo DLL en el directorio de Herramientas, luego ejecutar un script posterior a la instalación para registrar la biblioteca, pero no soy muy bueno en PowerShell.

¿Hay algún ejemplo en línea de cómo hacerlo (si es posible)?

Respuesta

36

Cuando me enfrenté a un problema similar creé un paquete NuGet con la siguiente estructura.

  • lib
    • MYCOMLib.dll
  • herramientas
    • mycom.dll
    • install.ps1

MYCOMLib.dll es una DLL de interoperabilidad generada desde mycom.dll con Type Library Importer (tlbimp.exe). Esto se hace simplemente con el comando:

Tlbimp mycom.dll 

El install.ps1 contiene el siguiente código:

param($installPath, $toolsPath, $package, $project) 

regsvr32 Join-Path $toolsPath '\mycom.dll' /s 

$project.Object.References | Where-Object { $_.Name -eq "MYCOMLib" } | ForEach-Object { $_.EmbedInteropTypes = $false } 

Lo que este script hace es que registra el DLL COM y establece la propiedad en el EmbedInteropTypes referencia a falso, que es necesario cuando se utiliza .NET 4. Consulte Interop type cannot be embedded para obtener más información.

+0

Ojalá pudiera también aceptar tu respuesta. Esto ayudó, de verdad. –

+0

Quizás sea una pregunta estúpida, pero ¿necesito ejecutar manualmente el script PS install.ps1 para que tenga efecto, o se ejecuta automáticamente por el proceso de instalación de NuGet? –

+1

@WillMarcouiller nuget lo ejecutará durante su proceso de instalación si coloca install.ps1 en una carpeta de herramientas en su nupkg. –

Cuestiones relacionadas