На какие функции .NET framework ссылаются сборки взаимодействия?

У нас есть решение 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, не так ли?


person Paul H    schedule 25.02.2016    source источник


Ответы (1)


Вы получаете неверную информацию от dotPeek. Он не сообщает вам, как он определил, на какую версию .NET нацелена. Это может быть специфично для сборки .NET, созданной компилятором. Поскольку он автоматически вставляет Атрибут [TargetFramework] в сборке указывает, какую версию .NET вы выбрали при сборке проекта.

Но в сборке взаимодействия не указывается версия .NET, прежде всего потому, что она не создается компилятором. Обратите внимание на то, что вы никогда не указывали версию при запуске Tlbimp.exe. И не может. Все, что может понять dotPeek, - это то, что он нацелен на .NET 4, ориентируясь на формат метаданных. Никак не может быть более конкретным.

И это не имеет значения, поскольку библиотека взаимодействия не использует возможности .NET Framework. Единственная особенность библиотеки заключается в том, что ваша программа может использовать функции COM-компонента. Таким образом, номер версии, который сообщает dotPeek, не имеет значения; Любая платформа .NET 4.x может использовать эту библиотеку.

У тебя нет настоящей проблемы.

person Hans Passant    schedule 25.02.2016