Как зарегистрировать общий COM как пакет NuGet в библиотеке классов (.NET Core)?
Есть 4 проекта:
- MyProject.Domain
- MyProject.Services.Contracts
- MyProject.Services.Acomba
- 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. Так что это зарегистрировано.
Что может заставить проект не найти регистрацию или что-то еще?