【问题标题】:Method in dll throwing System.MissingMethodException: Method not founddll 中的方法抛出 System.MissingMethodException:找不到方法
【发布时间】:2018-12-17 13:43:04
【问题描述】:

我有一个 .NET Core 2.0 Web API,显然是用 C# 构建的。我有一个从 VB dll 调用 void 函数的方法,当我运行程序时,这个函数调用会引发以下异常。

System.MissingMethodException:找不到方法:'System.Object Microsoft.VisualBasic.Interaction.IIf(Boolean, System.Object, System.Object)'

我已经在 GAC 上注册了 dll,我引用了项目本身而不是 .dll 文件,即使这样,Visual Studio 也不会让我调试它。

使用 Visual Studio 2017、.NET Core 2.0 框架。

【问题讨论】:

    标签: c# vb.net dll .net-core .net-core-2.0


    【解决方案1】:

    简而言之,没有办法将 VB dll 集成到 .NET Core。大多数本机 VB 函数都不起作用。我的建议是将 dll 翻译成 c#。

    【讨论】:

      【解决方案2】:

      .NET Core 中的所有内容现在都是 NuGet 包。只需从 NuGet 将 Microsoft.VisualBasic 包添加到您的项目中,您就可以开始了。

      请注意,您似乎正在使用Microsoft.VisualBasic.Interaction.IIf 方法。在 C# 语言中有一个等效的版本:the ? operator。像这样使用它:

      var myVariable = something == "A" ? "Equals A" : "Doesn't equal A"
      

      【讨论】:

      • 我已经下载了 VisualBasic 的 NuGet 包,唉,还是不行。显然,.NET Core 不支持大多数 VB 功能。我目前正在尝试让一个名为 CoreFX 的库正常工作,因为它确实有一个 VisualBasic 库和我需要的函数(即 iif()、InStr 等)。但是谢谢你的包裹。我不知道。
      • 源代码现已在 GitHub 中提供,因此您只需复制代码(并转换为 C#)即可获得所需的方法。例如IIf 方法是here
      • 虽然那个特定的 (IIf) 在 C# 中是没有意义的,因为 ? operator。你可以做something == somethingelse ? "this" : "that"
      • 我最终将整个 dll 翻译成 C#。
      【解决方案3】:

      IIf 转换为If

      示例:IIF(SomeCondition, "A", "B")IF(SomeCondition, "A", "B")

      参考:VB.NET Ternary Operator

      【讨论】:

        猜你喜欢
        • 2011-04-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-25
        • 2020-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多