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