2014-09-16 2 views
-1

Я получил сообщение от одного из наших поставщиков, объясняющих, что они собираются убрать поддержку своих библиотек Interop, потому что:Взаимодействие между управляемым и родным кодом, устаревшим в .NET 4.0?

Interop на основе связи между управляемой и нативный код был DEPRECATED начиная с .NET 4.0

Это правильно? Если да, то каков правильный путь и почему? Я не могу понять, почему это плохая идея управлять COM-объектом из Interop. Microsoft делает это, насколько я помню, со всеми продуктами Office.

+0

Какой тип взаимодействия? – SLaks

+2

Я не думаю, что такое утверждение верно. Возможно, они планируют отказаться от этого в своем пакете продуктов. –

+0

Сообщите им, чтобы предоставить вам ссылку MSDN, в которой указано это. – Hatjhie

ответ

15

Это потребует прочтения чайных листьев, вам, безусловно, следует связаться с продавцом и запросить детали. Но, конечно, что-то важное произошло в .NET 4.0, он больше не требует доставки библиотек interop. Microsoft Office больше не работает, начиная с Office 2013.

Очень элегантно решена в VS2010 и .NET 4.0 с новой функцией «Вставить типы взаимодействия». Также известна как функция «Нет PIA». Опция включается автоматически при добавлении ссылки на библиотеку типов. Эффект, как будто вы объявили все типы взаимодействия в вашем собственном исходном коде. Только те, которые вы используете. Особенно эффективны для библиотек Interop Office, они очень большие.

Основополагающим изменением в CL4 версии V4, который задействует эту функцию, является новый способ проверки идентичности типа. Для типов [ComImport] два типа считаются идентичными, если они имеют одинаковый [Guid]. Собрания, из которых они пришли, уже не важны. Это устраняет необходимость в PIA.

Возможно, вам придется немного изменить рабочий процесс, теперь выберите ссылку со вкладки COM. Возможно, небольшое изменение в исходном коде, если раньше вы привыкли создавать объект XxxxClass, вы просто редактируете его, чтобы вместо этого создать интерфейс Xxxx. И измените проект установщика, нет необходимости копировать DLL (ы) больше.

Все и все, COM Interop является значительно улучшены в .NET 4.0, в частности, изменения в C# языка делают его гораздо проще в использовании. В миллионах миль от неминуемой смерти :)

Таким образом, продавец, вероятно, говорит вам, что они больше не будут отправлять библиотеки взаимодействия. Потому что они вам больше не нужны. Если вы не представляете, как выглядит библиотека типов, обратитесь к поставщику за помощью.

+0

Да, у них есть библиотека типов, и это то, что они толкают. Но если у кого-то нет установленного продукта, ссылка на библиотеку типов не будет работать, но с Interop, который любой мог бы скомпилировать, они просто не смогут работать. Это становится проблемой, когда этот проект включен в среду CI или в большое решение, которое другие могут использовать. – Denis

+0

Конечно, для программистов очень мало внимания, которые пишут код, который они не могут проверить. Все еще не проблема, вы можете просто запустить Tlbimp.exe на машине с установленным продуктом. Это также создает библиотеку interop. Не рекомендуется, конечно, легко закончить с устаревшими библиотеками. И вы не можете проверить. –

1

У MSDN все еще есть документально подтвержденная поддержка Interop. Вот ссылка на Interop Marshalling, обратите внимание, что она документирована для .net 4.5.

1

Либо они неправильно интерпретировали ресурс MSDN, читали болезненно неправильное сообщение в блоге, не хотели больше поддерживать общение или вы их неправильно поняли.

Это требование неверно в любом случае, попросите у них достоверный источник.

1

Есть четыре вида неуправляемого Interop в .NET, и AFAIK ни один из них не устарел до сих пор:

  • COM Interop
  • Platform Invoke (P/Invoke), т.е. [DllImport]
  • "Это просто работает" Interop (только для C++/C++/CLI)
  • WinRT Interop, то есть ссылки на файл .winmd метаданных из проекта (начиная с Windows, 8/Visual Studio 2012/.NET 4.5)

This page on MSDN, в котором говорится о Visual Studio 2013, упоминаются первые три в настоящем времени; нет никакого намека на то, что любой из этих механизмов взаимодействия будет устаревшим. И последний (Windows Runtime interop) был недавно представлен.

Смежные вопросы