Если вас устраивает версия CLR , скомпилировавшая сборку, вы можете использовать свойство Assembly.ImageRuntimeVersion
.Согласно MSDN, это свойство:
представляет версию общеязыковой среды выполнения (CLR), сохраненную в файле, содержащем манифест.
и
По умолчанию для ImageRuntimeVersion установлена версия CLR, используемая для сборки сборки.Однако во время компиляции ему могло быть присвоено другое значение.
Конечно, это не дает конкретной версии .NET Framework (например, .NET Frameworks 2, 3.0и 3.5 все в 2.0 CLR).
Если версии CLR недостаточно, вы можете попытаться «оценить» (угадать), какая версия должна быть основана на сборках, на которые она ссылается.Для .NET 1 и 4 версии CLR должно быть достаточно.Однако если бы версия CLR была 2.0, вы бы не знали, означает ли это 2.0, 3.0 или 3.5, чтобы вы могли попробовать больше логики.Например, если вы увидели, что сборка ссылается на System.Core
(используя Assembly.GetReferencedAssemblies()
), то вы знаете, что версия 3.5, поскольку System.Core
была новой в 3.5.Это не совсем верно, так как рассматриваемая сборка может не использовать какие-либо типы из сборки, поэтому вы не сможете это уловить.Чтобы попытаться отловить больше случаев, вы можете просмотреть все ссылочных сборок и проверить номера их версий - возможно, выполнить фильтрацию только для сборок, которые начинаются с System, чтобы избежать ложных срабатываний с другими библиотеками.Если вы видите какие-либо сборки System. *, На которые есть ссылки, которые имеют версию 3.5.xx, то вы также можете быть уверены, что она была построена для 3.5.
Как вы заметили, я неверю, что TargetFrameworkProfile
ускользает от Visual Studio.Однако если для приложения существует файл app.config, Visual Studio, возможно, поместил туда целевую среду.Например, если вы настроите проект для использования профиля клиента 4.0, Visual Studio создаст файл app.config, подобный следующему:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
</configuration>