Может ли NuGet распространять COM-DLL?

Можно ли использовать NuGet для распространения COM-библиотеки DLL?

Как мне настроить пакет?

Я думаю, что я мог бы поместить DLL в каталог Tools, а затем запустить post-install script, чтобы зарегистрировать библиотеку, но я не очень хорошо разбираюсь в PowerShell.

Есть ли онлайн-примеры того, как это сделать (если возможно)?

Ответы

Ответ 1

Когда я столкнулся с аналогичной проблемой, я создал пакет NuGet со следующей структурой.

  • Lib
    • MYCOMLib.dll
  • инструменты
    • mycom.dll
    • install.ps1

MYCOMLib.dll - это межпроцессорная DLL, сгенерированная из mycom.dll с импортером библиотеки типов (tlbimp.exe). Это просто выполняется с помощью команды:

Tlbimp mycom.dll

Файл install.ps1 содержит следующий код:

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

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

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

Что делает этот скрипт, так это то, что он регистрирует COM-библиотеку COM и устанавливает для свойства EmbedInteropTypes ссылку на false, что необходимо при использовании.NET 4. См. Тип Interop не может быть встроен для получения дополнительной информации.