GetActiveObject не является членом Marshal

Я работаю в vb.net в Visual Studio 2017. Я новичок в Visual Basic. Я больше знаком с VBA.

Я создал прототип кода для доступа к Autodesk Vault 2019, скачал файл и открыл его в Autodesk Inventor 2019. Этот код был создан с помощью шаблона Autodesk Inventor AddIn в Visual Studio. Код скомпилирован без ошибок и функционирует как задумано.

Конечная цель этого приложения — скомпилировать код в DLL, а затем вызвать эту DLL (с ​​аргументами) из VBA в другой части программного обеспечения (CorelDraw). Насколько я понимаю, для этого мне нужно поместить код в шаблон библиотеки классов, чтобы он правильно скомпилировался в DLL.

При этом у меня возникла проблема со следующей строкой кода:

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

«Маршал» взят из «System.Runtime.InteropServices», который импортируется в начале приложения со следующей строкой кода:

Imports System.Runtime.InteropServices

Проблема в том, что Visual Studio не распознает GetActiveObject. Он выделяет его красной волнистой линией. Когда я навожу на него курсор, появляется всплывающая подсказка: «GetActiveObject» не является членом «Маршала»».

На момент написания этого у меня открыто два экземпляра Visual Studio 2017. Один с версией этого кода из библиотеки классов и один с версией Autodesk Inventor AddIn. В версии AddIn нет проблем с этой строкой кода, а в библиотеке классов есть.

Согласно некоторым инструкциям по созданию библиотеки классов DLL, мой код начинается со следующего:

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

Я не уверен, актуально это или нет. Как я уже сказал, я новичок в VB.net.

Я провел много времени, возясь со ссылками, чтобы попытаться прояснить это, но безуспешно. Что может быть причиной этого? Я не могу найти существующие сообщения на форуме (здесь или где-либо еще) с какой-либо похожей проблемой.


person Orion DeYoe    schedule 17.12.2018    source источник
comment
У вас установлен ReSharper? Иногда его кеш перегружается, и он начинает выделять (красными волнистыми линиями) то, что на самом деле правильно компилируется (перезапуск VS обычно исправляет это). GetActiveObject был членом Marshal с незапамятных времен, так что... если решение не строится, следите за опечаткой?   -  person Mathieu Guindon    schedule 18.12.2018
comment
Спасибо за предложения! У меня это не установлено. Этот код был скопирован и вставлен из рабочего проекта. Я просматривал это по крайней мере 100 раз, поэтому я исключил опечатки. Я отредактировал исходный пост, чтобы добавить потенциально актуальную информацию.   -  person Orion DeYoe    schedule 18.12.2018
comment
Marshal.GetActiveObject недоступен в .NET Core. Убедитесь, что вы ссылаетесь на .NET Framework, а не на .NET Core.   -  person Simon Mourier    schedule 18.12.2018
comment
Вот оно! Это был проект .NET Core. Я скопировал код в новый проект .NET Framework, и он отлично компилируется. Спасибо за вашу помощь!   -  person Orion DeYoe    schedule 18.12.2018


Ответы (1)


Ответ был опубликован @Simon_Mourier в комментариях к исходному сообщению. Проект Visual Studio был нацелен на .NET Core. Чтобы решить эту проблему, я просто переключил проект на целевой .NET Framework, и ошибка исчезла.

person Orion DeYoe    schedule 16.07.2019