Получить список программ, использующих каждую версию .NET, установленную на моем компьютере - PullRequest
1 голос
/ 18 сентября 2010

Это не срочная необходимость, а скорее любопытство, которое у меня в голове некоторое время.Для каждой версии .NET Framework, установленной на моем компьютере, я хотел бы перечислить установленные приложения, которым это требуется.Имея это в виду, я мог знать, смогу ли я безопасно удалить более ранние версии фреймворка, не вызывая сбой каких-либо программ.Есть ли такая утилита?Я несколько сомневаюсь в этом, поэтому в качестве секунды я буду принимать предложения о том, как кодировать это в C #.

Пример вывода:

.NET 1.1 required by:
    ProgramX, ProgramY, ...
.NET 2.0 required by:
    ProgramA, ProgramB, ProgramC, ...
.NET 3.0 required by:
    ...
.NET 3.5 required by:
    ...
.NET 4.0 required by:
    ...

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Просто несколько указателей на то, что нужно, я сомневаюсь, что вы будете преследовать это, когда узнаете, что нужно.

Отправной точкой является написание кода, который перечисляет все файлы EXE и DLL на ваших дисках. Для каждого найденного файла сначала нужно проверить, действительно ли это управляемая программа. Затем вам нужно снять номер версии метаданных из заголовка COR. Указывает, к какой версии CLR был создан исполняемый файл. Общие значения: 2.0.50727 для .NET 2.0, 3.0 и 3.5, 4.0.30319 для .NET 4.0, я не знаю номеров для .NET 1.x

Далее вам необходимо использовать Assembly.GetReferencedAssemblies (), чтобы узнать, от каких сборок .NET он зависит. Вам нужно будет создать свой собственный индекс сборок, которые присутствуют в 2.0, 3.0, 3.5 и его пакетах обновления. Это позволяет узнать, какая конкретная версия необходима.

Далее необходимо проанализировать любой файл .config, который может присутствовать для EXE, и проверить элементы <requiredRuntime> и <supportedRuntime>. Последний атрибут является хитрым, поскольку он может появляться более одного раза.

Вероятно, есть некоторые вещи, которые я пропустил, такие как сборки издателя и bindingRedirects. Используйте исходный код ildasm.exe в SSCLI20, чтобы получить трещину при чтении номера версии метаданных. Выигрыш для такого инструмента невелик. Сегодня, когда один терабайтный накопитель продается за сотню долларов, потенциальная экономия такого инструмента составляет около 4 центов.

0 голосов
/ 18 сентября 2010

Поскольку приложение, использующее .NET 1.1, может работать в .NET 2.0, 3, 0, 3.5 и .NET 4.0 (и в целом приложение, использующее более низкую версию .NET, может работать в более высокой версии .NET), ваша задача, вероятно, не не слишком много смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...