【发布时间】:2020-06-17 19:28:00
【问题描述】:
我有一个 dotnet 核心库、一个框架 4.7.2 库和一个 vb6 应用程序。
我想编写一个通用库供他们所有人访问,因此选择 .netstandard2.0
我尝试了 .netstandard2.0 库和 vb6 之间的 4.7.2 框架包装库。
但是我遇到了assembly binding problems
看着the docs我明白了
在 .NET Core 中,与 .NET Framework 相比,将 .NET 对象公开给 COM 的过程已大大简化。
但是没有提到.netstandard2.0
尽管我的项目使用的是 .netstandard2.0,但我还是决定尝试遵循文档
我已按照有关生成 COM 主机的说明进行操作,在这种情况下,应该生成输出文件 ProjectName.dll、ProjectName.deps.json、ProjectName.runtimeconfig.json 和 ProjectName.comhost.dll。
但是 ProjectName.comhost.dll 和 ProjectName.runtimeconfig.json 不会创建。
我在dotnet standard issue 中看到,Microsoft 计划在“Preview 4”中提供工具支持
我正在运行 VS 16.4.5
[更新]
我决定尝试制作一个 .net 核心包装库并为 com 启用它。
我能够通过 nuget 包将我的 .netstandard 添加到包装库(我使用 azure devops 构建 .netstandard 库)
当我构建包装器库时,会在 bin\Debug\netcoreapp3.1 文件夹中创建 .dll、.deps.json、.pdb、.runtimeconfig.dev.json 和 .runtimeconfig.json 文件。
但是 bin\debug 文件夹中没有任何 .netstandard 库文件。
我将 .netstandard 库和 .netcore 包装器库复制到同一个文件夹并运行
regsvr32 MyCoreComWrapper.comhost.dll
但是没有创建我需要能够从 VB6 使用的 .tlb 文件
我在文档中注意到以下内容
与 .NET Framework 不同,.NET Core 不支持 从 .NET Core 程序集生成 COM 类型库 (TLB)。这 指导是手动编写 IDL 文件或 C/C++ 标头 COM 接口的本机声明。
我找到了一些信息 on github,但我希望获得制作 .tlb 的分步指南
我考虑过使用后期绑定,但不确定如何将它与 com 库一起使用。
[更新]
我在GitHub 上放了一个示例项目,其中包括一些VB6 文件。 使用 VB6 引用框架库引用的 .tlb。
当我尝试运行时,我得到了
Could not load file or assembly 'Microsoft.EntityFrameworkCore, Version=3.1.2.0,
Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The system cannot find the file specified.
所以我将框架测试项目中的所有文件复制到我的 vb6 文件夹中,重新构建并运行。
然后我得到了错误
Could not load file or assembly 'Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.0.0,
Culture=neutral, PublicKeyToken=adb9793829ddae60' or one of its dependencies. The system cannot find the file specified.
我看到文件 Microsoft.Extensions.DependencyInjection.dll 与文件版本 3.100.220.6706 一起存在
【问题讨论】:
-
有没有小型复现方案(包括VB6项目等)?
-
这“只是”一个程序集绑定解决问题。我让它为我工作。您可以尝试 1) 构建 VB6 项目(如 Project1.exe) 2) 在旁边创建一个 Project1.exe.config,3) 将我在这里准备的绑定重定向列表放入:pastebin.com/raw/R2ZXUH9D 和 4 ) 运行。如果我的文件不起作用,我创建了一个小工具,可以从任何目录创建它:github.com/smourier/BindingRedirectGenerator
标签: com vb6 com-interop .net-standard-2.0