У нас есть решение Visual Studio с около 90 проектами. Большинство из них построены для DLL-файлов, некоторые из них написаны на C++, другие - на C#. Проекты взаимодействуют друг с другом через COM. Мы используем tlbexp для генерации TLB-файлов некоторых проектов C# (те, на которые ссылаются в проектах на C++). И мы используем tlbimp для генерации междоменных DLL проектов C++. Я не полностью вникал в эту тему, но я думаю, что файлы interop просто определяют интерфейсы классов C++, чтобы они могли использоваться из других проектов, верно?Какие функции платформы .NET используют ссылку на сборку ссылок?
Теперь возникает вопрос: для обновления всего решения до Visual Studio 2015 и его компиляции с .NET 4.6.1 я проверил результирующие сборки с помощью dotPeek с помощью JetBrains. Я вижу, что все проекты C# корректно используют .NET 4.6.1, сами библиотеки C++ являются родными и не ссылаются ни на .NET. Теперь меня удивил тот факт, что dotPeek сказал мне, что межплатные DLL (которые были результатом проектов на C++) ссылались на .NET 4.0.
После «замечательного» дня попыток сделать их ссылкой .NET 4.6.1 и большим количеством исследований, я, наконец, не нашел способа сделать ссылку interops .NET 4.6.1. Возможно ли это? Моя текущая догадка заключается в том, что все interop DLL генерируются подобно этой ссылке только базовым .NET 4.0, только потому, что она использует ту же среду CLR, что и .NET 4.6.1.
Это правильно? Должно быть возможно выполнить сборки в любой системе, на которой установлена .NET Framework 4.6.1, не так ли?