GetActiveObject 不是元帅的成员

GetActiveObject is not a member of Marshal

2017 年 Visual Studio 我在 vb.net 工作。我对 visual basic 还很陌生。我比较熟悉 VBA.

我制作了用于访问 Autodesk Vault 2019、下载文件并在 Autodesk Inventor 2019 中打开的代码原型。此代码是使用 visual studio 中的 Autodesk Inventor AddIn 模板创建的。代码编译无误并按预期运行。

此应用程序的最终目的是将代码编译为 DLL,然后在另一软件 (CorelDraw) 中从 VBA 调用该 DLL(带参数)。为了做到这一点,据我所知,我需要将代码放在 class 库模板中,以便将其正确编译为 DLL。

执行此操作时,以下代码行出现问题:

ActiveInvApp = Marshal.GetActiveObject("Inventor.Application")

"Marshal" 来自 "System.Runtime.InteropServices",它是在应用程序开头使用以下代码行导入的:

Imports System.Runtime.InteropServices

问题是 Visual Studio 无法识别 "GetActiveObject"。它用红色波浪线突出显示它。当我将光标悬停在它上面时,它会显示工具提示:“'GetActiveObject' 不是 'Marshal' 的成员”。

在撰写本文时,我打开了两个 Visual Studio 2017 实例。一个是此代码的 class 库版本,另一个是 Autodesk Inventor AddIn 版本。 AddIn 版本没有这行代码的问题,class 库有。

根据一些关于创建 DLL class 库的说明,我的代码以以下内容开头:

Namespace VaultCOMFunctions
Public Module StringLibrary
    <Extension>
    Public Sub OpenFromVault(PartNum As String)
    'Code for opening the file goes here

我不确定这是否相关。就像我说的,我对 VB.net 有点陌生。

我花了很多时间研究参考文献以试图解决这个问题,但没有成功。是什么原因造成的?我找不到任何现有的论坛帖子(在这里或其他地方)有任何类似的问题。

答案由@Simon_Mourier在原post的评论中post编辑。 Visual Studio 项目以 .NET Core 为目标。为了解决这个问题,我只是将项目切换到目标 .NET Framework,错误就消失了。

检查您的目标 .NET Framework 版本。 .NET 4.8 后删除了 GetActiveObject。

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.getactiveobject?view=netframework-4.8