Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在类库(.NET Core)中将COM共享注册为NuGet包?_.net_Powershell_Nuget_.net Core Rc2_.net Standard 1.5 - Fatal编程技术网

如何在类库(.NET Core)中将COM共享注册为NuGet包?

如何在类库(.NET Core)中将COM共享注册为NuGet包?,.net,powershell,nuget,.net-core-rc2,.net-standard-1.5,.net,Powershell,Nuget,.net Core Rc2,.net Standard 1.5,共有4个项目: MyProject.Domain MyProject.Services.Contracts MyProject.Services.Acomba MyProject.Services.Acomba.Tests Acomba项目依赖于一个NuGet包,我是根据这个包打包的 所有这些项目的类型和目标如下: NET451 NET452 NET461 NETSTANDARD1.5 除了由.NET核心应用程序组成的测试项目外,该应用程序的目标是: NETCOREAPP1.0 正如网页

共有4个项目:

  • MyProject.Domain
  • MyProject.Services.Contracts
  • MyProject.Services.Acomba
  • MyProject.Services.Acomba.Tests
  • Acomba项目依赖于一个NuGet包,我是根据这个包打包的

    所有这些项目的类型和目标如下:

    • NET451
    • NET452
    • NET461
    • NETSTANDARD1.5
    除了由.NET核心应用程序组成的测试项目外,该应用程序的目标是:

    • NETCOREAPP1.0
    正如网页所描述的

    无论是从还是运行测试,最终都会出现以下错误:

    System.Runtime.InteropServices.COMException:检索CLSID为{00000115-0000-000F-1000-000AC0BA1001}的组件的COM类工厂失败,原因是以下错误:80040154类未注册(HRESULT的异常:0x80040154(REGDB_E_CLA SSNOTREG)

    这条消息表明,Acomba项目所依赖的COM库没有在我的本地工作站上注册,尽管我已经完成了作为COM库共享的SDK的安装过程

    因此,我希望从NuGet包中运行这个install.ps1Powershell脚本,或者在project compile中自动运行它。不幸的是,这个脚本找不到,我的项目中引用的包也找不到,因为它们是用动态编译的

    如何在类库(.NET Core)中通过Nuget包注册这样共享的COM?

    更新

    根据本文:,NuGet软件包的tools文件夹中包含的install.ps1脚本应该在软件包安装时运行。所以我猜这可能是关于剧本本身的一些东西,它并没有真正起作用

    这个脚本有什么问题吗?

    我对Powershell了解不多,因此提出了我的问题

    安装.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 }
    
    更新

    在使用
    regsvr32.exe
    注册DLL时,我注意到出现了一个错误。事实证明,注册DLL需要提升权限。所以,我试着以管理员的身份运行VS,但没有任何改变。将显示相同的错误消息=(

    是因为我使用NETCOREAPP1.0(测试项目)和NETSTANDARD1.5库运行测试失败了还是

    要注意的是,每当我使用“常规”类库时,它都能完美地工作。我只是不理解这个问题

    更新

    CLSID使用RegEdit.exe在Windows注册表中找到。因此它已注册


    是什么原因导致项目找不到注册信息或其他信息?

    只是一个猜测:可能与COM组件的位数(32位/64位)有关吗?@DavidBrabant:我只是说不上来。我猜COM库是32位的,因为项目是在很多很多年前首次推出的。我听说在注册
    regsvr32.exe
    的任何一个版本时,架构都会有冲突-我只是记不起哪个是哪个。@DavidBrabant:经过一些研究,我使用bot注册了COM我试图找到如何在我的XPROJ(类库(.NET Core))中针对x86CPU体系结构。唯一可用的选项是
    AnyCPU
    ,这似乎会在像我这样的64位Windows上造成一些问题。我创建了一个新的编译配置选项
    x86
    ,它似乎没有解决问题-除了我从
    AnyCPU
    创建它,因为
    x86
    似乎不存在于XPROJ中,而且高级配置选项。只是一个猜测:它可能与COM组件的位数(32位/64位)有关吗?@DavidBrabant:我只是说不上来。我猜COM库是32位的,因为项目是在很多很多年前首次推出的。我听说在注册
    regsvr32.exe
    的任何一个版本时,架构都会有冲突-我只是记不起哪个是哪个。@DavidBrabant:经过一些研究,我使用bot注册了COM我试图找到如何在我的XPROJ(类库(.NET Core))中针对x86CPU体系结构。唯一可用的选项是
    AnyCPU
    ,这似乎会在像我这样的64位Windows上造成一些问题。我创建了一个新的编译配置选项
    x86
    ,它似乎没有解决问题-除了我从
    AnyCPU
    创建它,因为
    x86
    似乎不存在于XPROJ中,而且高级配置选项。