Как получить версию .NET (1.1, 2.0, 3.0 и т. Д.), Под которой была собрана сборка? - PullRequest
3 голосов
/ 05 декабря 2008

У меня есть сборка. Есть ли способ определить, какая версия .NET использовалась для сборки этой сборки?

Ответы [ 5 ]

2 голосов
/ 05 декабря 2008

Вы можете использовать Assembly.ImageRuntimeVersion. Согласно документам MSDN , по умолчанию это версия CLR, используемая для сборки сборки. Хотя, видимо, это можно изменить.

Это строковое свойство, поэтому вам придется выполнить некоторое сравнение строк.

1 голос
/ 16 октября 2009

Для фреймворков <2.0 и фреймворка 4.0, версия mscorlib, на которую ссылаются, даст вам версию фреймворка. Для платформ 2.0 - 3.5 проверьте наличие каких-либо ссылок на System.Core или одну из других сборок 3.5+, а также PresentationCore или любые другие сборки 3.0+. Если у вас нет ни одного из них, он должен быть нацелен на 2.0. </p>

1 голос
/ 05 декабря 2008

Я не верю в это. Создать приложение .NET 1.1 с использованием .NET 2.0 довольно сложно, хотя это и невозможно. Поэтому, если вы проверили версию mscorlib, на которую ссылается приложение, вы можете получить «вероятно точную» картину того, было ли оно создано с использованием 1.1 или 2.0. +.

Вам также нужно было бы спросить себя, какой ответ вы хотели бы использовать при использовании VS2008, но опираясь на цель .NET 2.0. Вы на самом деле заинтересованы в том, какая версия компилятора использовалась? Могут быть некоторые характерные различия между выходными данными разных версий компилятора. Дополнительные функции тоже могут его выдать - если приложение написано на C # для .NET 2.0, вы можете найти типы, которые выглядят так, как будто они были сгенерированы из анонимных типов в исходном коде. Конечно, это зависит от языковой функции, используемой в первую очередь ...

Зачем вам это нужно, из интереса?

0 голосов
/ 05 декабря 2008

Часть проблемы с вашим вопросом заключается в том, что .NET проделал довольно хорошую работу, не меняя код по мере увеличения версий. Под этим я подразумеваю, что mscorlib будет таким же в .NET 4.0, как и в .NET 1.1.

Но я вроде согласен с подразумеваемым вопросом Джона Скита: зачем вам это знать? Это просто из интереса, потому что я думаю, что это не должно иметь значения для вас.

0 голосов
/ 05 декабря 2008

Возможно, вы можете использовать System.Reflection для проверки номера версии системных сборок.

using System;
using System.Reflection;

class Module1
{

    public static void CheckReferencedAssemblies(string assemblyPath)
    {
         Assembly a = Assembly.Load(assemblyPath);

        foreach (AssemblyName an in a.GetReferencedAssemblies() )
        {
             // Check an.Version for System assemblies
        }
    }
}

Редактировать: Я не уверен, что понял, что вы хотите.

...