С Коллекции 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 .
Я подозреваю, что метод, и самый надежный и самый общий, будет PublicKeyToken. Да, существует больше чем один, но это будет конечным списком и тем, который не изменяется очень часто.
В этом отношении, у Вас мог просто быть белый список имен сборки - что список также будет и конечен и статичен между версиями платформы.
Нет, оно не начинается с «Система». Вы можете проверить «WindowsBase», которая является сборкой фреймворка.
Вы также не можете проверить PublicKeyToken, потому что есть другие сборки Microsoft, подписанные ключами «по умолчанию», но они не являются частью .NET Framework (Visual Студийные сборки).
Лучший способ сделать это - получить коллекцию установленных платформ .NET и проверить, является ли целевая сборка частью их RedistList ( RedistList \ FrameworkList.xml
).
FrameworkList.xml можно найти в:
Вы могли использовать отражение для рассмотрения издателя блока и координаты это с путем блока. При нахождении блока, издателем которого является Microsoft, и который существует где-нибудь ниже C:\Windows\Microsoft.NET\Framework
, это - безопасная ставка, это - часть времени выполнения.
Вообще-то, если задуматься, издатель даже не может быть необходимым. Что-либо под тем путем должно быть частью времени выполнения (запрет неправильно себя ведущего приложения, которое это надувает, где это не должно быть).
Если вы знаете, что ни одна из ваших DLL не будет находиться в GAC, вы можете проверить, находится ли каждая сборка в GAC или нет. Если да, то не копируйте. Если нет, то скопируйте. В классе Assembly есть свойство под названием GlobalAssemblyCache. Очевидно, что в некоторых ситуациях это будет работать лучше, чем в других.
Для этого я использую имя продукта, встроенное в сборку через AssemblyProductAttribute.
var attribute = assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false)[0] as AssemblyProductAttribute;
var isFrameworkAssembly = (attribute.Product == "Microsoft® .NET Framework");
Я использую эту технику для группировки сборок по продуктам на экране «О программе» приложения, и мне кажется, что она мне подходит.