Как зарегистрировать общий COM как пакет NuGet в библиотеке классов (.NET Core)?

Есть 4 проекта:

  1. MyProject.Domain
  2. MyProject.Services.Contracts
  3. MyProject.Services.Acomba
  4. MyProject.Services.Acomba.Tests

Проекты Acomba зависят от пакета NuGet, который я упаковал в соответствии с этим ответом SO.

Все эти проекты имеют тип библиотеки классов (.NET Core) и целевые:

  • NET451
  • NET452
  • NET461
  • NETSTANDARD1.5

За исключением тестового проекта, который состоит из.NET Core App, цель которого:

  • NETCOREAPP1.0

Как описывает веб-страница Начало работы с xUnit.net (.NET Core / ASP.NET Core).

Независимо от того, запускаю ли я тесты с консоли или Visual Studio, в итоге возникает эта ошибка:

System.Runtime.InteropServices.COMException: получение фабрики классов COM для компонента с CLSID {00000115-0000-000F-1000-000AC0BA1001} не удалось из-за следующей ошибки: 80040154 Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLA SSNOTREG)),

Из этого сообщения становится очевидным, что библиотека COM, от которой зависят проекты Acomba, не зарегистрирована на моей локальной рабочей станции, хотя я прошел процесс установки SDK, совместно используемого в качестве библиотеки COM.

Поэтому я хотел бы запустить скрипт Powershell install.ps1 из пакета NuGet или запустить его автоматически при компиляции проекта. К сожалению, этот скрипт нигде не найден, равно как и пакеты, на которые есть ссылки в моих проектах, так как они скомпилированы на лету с Roslyn.

Как зарегистрировать COM-общий доступ как таковой через пакет Nuget в библиотеке классов (.NET Core)?

ОБНОВИТЬ

Основываясь на этом посте: при создании пакета Nuget, который будет устанавливать файлы, относящиеся к решению, сценарий install.ps1, содержащийся в папке tools пакета NuGet, должен запускаться после установки пакета. Так что я думаю, что это может быть что-то в самом скрипте, которое на самом деле не работает.

Что-то не так с этим скриптом?

Я не знаю много о Powershell, поэтому мой вопрос.

install.ps1

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

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

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

ОБНОВИТЬ

Я заметил во время регистрации DLL с помощью regsvr32.exe что произошла ошибка. Оказалось, требуются повышенные разрешения для регистрации DLL. Итак, я попытался запустить VS в качестве администратора, и это ничего не изменило. Отображается то же сообщение об ошибке. знак равно

Может ли это быть из-за того, что я запускаю тесты, используя NETCOREAPP1.0 (тестовый проект) с библиотекой NETSTANDARD1.5, из-за которой происходит сбой или?

Следует отметить, что всякий раз, когда я использую "обычную" библиотеку классов, она работает безупречно. Я просто не понимаю проблемы...

ОБНОВИТЬ

CLSID находится в реестре Windows с помощью RegEdit.exe. Так что это зарегистрировано.

Что может заставить проект не найти регистрацию или что-то еще?

0 ответов

Другие вопросы по тегам