【问题标题】:C# Class Library "Make assembly COM-Visible" grey or not availableC# 类库“使程序集 COM 可见”灰色或不可用
【发布时间】:2020-11-21 01:19:10
【问题描述】:

我想用 C# 编写一个 DLL 以在 VB6 中使用。当我查找它时,我发现了this。对我来说听起来不错,但我无法检查“使程序集 COM-Visible”。我尝试了不同的项目类型,但“程序集信息”按钮不存在,或者“使程序集 COM-Visible”显示为灰色。有什么想法吗?

我正在使用:

  • Visual Studio 2019 社区
  • .Net 标准 2.0
  • .Net Framework 4.8 SDK

【问题讨论】:

    标签: .net vb6 visual-studio-2019 com-interop class-library


    【解决方案1】:

    这些真的不是魔法。 COM-visible 是一个你可以自己添加的属性:

    https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.comvisibleattribute?view=netstandard-2.0

    注册您的 .NET dll 也可以自己完成,不需要 Visual Studio 为您完成:

    https://docs.microsoft.com/en-us/dotnet/framework/tools/regasm-exe-assembly-registration-tool

    如果是不需要共享的私有 dll,可以使用 /codebase 选项,而不是放在 GAC 中。 /tlb 选项可用于生成 VB6 IDE 可以理解的类型库。

    【讨论】:

    • 让VS为你管理注册/注销可以非常方便。尤其是在您弄清楚应该设置的所有 GUID 等并且界面(即 TLB)不稳定之前。
    • 也许吧。我总是发现它对我的伤害大于它的帮助。典型的编译和注册版本与创建它的 VB6 项目一起位于我的文件系统中。因此,当在 Visual Studio bin 文件夹中的一个上执行新开发时,会导致它在该位置重新注册一个,从而破坏 VB 项目。一旦通过所有测试,我更愿意自己手动将开发中的项目提升到 VB6 项目。
    • 是有道理的,但如果不需要,您可能希望避免将它们放在一起,假设 DLL 不关心,它可以更容易地使用 VS 输出位置中的那些它的物理位置可以正常运行。
    猜你喜欢
    • 2016-05-29
    • 2012-10-12
    • 2018-08-14
    • 2011-05-02
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多