Если вас устраивает версия CLR, которая скомпилировала сборку, вы можете использовать _ 1_. Согласно MSDN, это свойство:
представляющая версию среды CLR, сохраненную в файле, содержащем манифест.
а также
По умолчанию для ImageRuntimeVersion задана версия CLR, используемая для построения сборки. Однако во время компиляции могло быть установлено другое значение.
Конечно, это не дает вам конкретной версии .NET Framework (например: .NET Framework 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.x.x, то вы также можете быть уверены, что она была создана для 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>
person
Stephen McDaniel
schedule
13.09.2011
TargetFrameworkProfile
влияет только на то, какие ссылки Visual Studio позволит вам делать из проекта. Я не думаю, что что-то компилируется в выходную сборку. - person Damien_The_Unbeliever   schedule 28.07.2011public string TargetFrameworkProfile { get; set; }
Microsoft.Build.Tasks - person Mark Schultheiss   schedule 23.05.2018