Определение, является ли блок частью платформы.NET

С Коллекции Eclipse (ранее коллекции GS ) будет работать метод removeIf, определенный на MutableCollection :

MutableList list = Lists.mutable.of(1, 2, 3, 4, 5);
list.removeIf(Predicates.lessThan(3));
Assert.assertEquals(Lists.mutable.of(3, 4, 5), list);

С синтаксисом Java 8 Lambda это можно записать следующим образом:

MutableList list = Lists.mutable.of(1, 2, 3, 4, 5);
list.removeIf(Predicates.cast(integer -> integer < 3));
Assert.assertEquals(Lists.mutable.of(3, 4, 5), list);

Необходим вызов Predicates.cast(), потому что по умолчанию removeIf метод был добавлен на интерфейс java.util.Collection в Java 8.

Примечание: я являюсь коммиттером для коллекций Eclipse .

16
задан Peter Mortensen 21 February 2013 в 09:30
поделиться

5 ответов

Я подозреваю, что метод, и самый надежный и самый общий, будет PublicKeyToken. Да, существует больше чем один, но это будет конечным списком и тем, который не изменяется очень часто.

В этом отношении, у Вас мог просто быть белый список имен сборки - что список также будет и конечен и статичен между версиями платформы.

3
ответ дан 30 November 2019 в 22:10
поделиться

Нет, оно не начинается с «Система». Вы можете проверить «WindowsBase», которая является сборкой фреймворка.

Вы также не можете проверить PublicKeyToken, потому что есть другие сборки Microsoft, подписанные ключами «по умолчанию», но они не являются частью .NET Framework (Visual Студийные сборки).

Лучший способ сделать это - получить коллекцию установленных платформ .NET и проверить, является ли целевая сборка частью их RedistList ( RedistList \ FrameworkList.xml ).

FrameworkList.xml можно найти в:

  • .NET 2.0: C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ RedistList
  • .NET 3.x: C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework \ v VersionNumber \ RedistList
  • .NET 4.x: C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v VersionNumber \ RedistList
  • .NET Core: C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETCore \ v VersionNumber \ RedistList
6
ответ дан 30 November 2019 в 22:10
поделиться

Вы могли использовать отражение для рассмотрения издателя блока и координаты это с путем блока. При нахождении блока, издателем которого является Microsoft, и который существует где-нибудь ниже C:\Windows\Microsoft.NET\Framework, это - безопасная ставка, это - часть времени выполнения.

Вообще-то, если задуматься, издатель даже не может быть необходимым. Что-либо под тем путем должно быть частью времени выполнения (запрет неправильно себя ведущего приложения, которое это надувает, где это не должно быть).

1
ответ дан 30 November 2019 в 22:10
поделиться

Если вы знаете, что ни одна из ваших DLL не будет находиться в GAC, вы можете проверить, находится ли каждая сборка в GAC или нет. Если да, то не копируйте. Если нет, то скопируйте. В классе Assembly есть свойство под названием GlobalAssemblyCache. Очевидно, что в некоторых ситуациях это будет работать лучше, чем в других.

1
ответ дан 30 November 2019 в 22:10
поделиться

Для этого я использую имя продукта, встроенное в сборку через AssemblyProductAttribute.

var attribute = assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false)[0] as AssemblyProductAttribute;
var isFrameworkAssembly = (attribute.Product == "Microsoft® .NET Framework");

Я использую эту технику для группировки сборок по продуктам на экране «О программе» приложения, и мне кажется, что она мне подходит.

4
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: