Как вы можете найти неиспользуемые значки, изображения, строки в файлах .resx, которые, возможно, стали «потерянными» и больше не требуются?Найти неиспользуемые ресурсы в .NET решении
ответ
Это не информация, которую алгоритм может надежно вычислить. Проверенная программа может получить список всех ресурсов и сделать что-то с ними, например, разрешить пользователю выбирать из нескольких значков.
Ваш лучший выбор - это, вероятно, поиск всех ссылок на ваш API доступа к ресурсам и их проверка вручную. Используя grep
/sed
, вы можете уменьшить количество сайтов, которые вы должны проверить вручную, используя все «простые», где используется простая строка.
Я сам это рассматривал, и я считаю, что у меня есть два варианта. Оба они полагаются на то, что я использую вспомогательный метод для извлечения необходимого ресурса из файлов ресурсов.
Вход
Добавьте код в метод «getresource» или методов, так что каждый раз, когда ресурс доступен, главный ресурс записывается в журнал. Затем попробуйте получить доступ к каждой части сайта (здесь может быть полезен тестовый скрипт). В результате записи журнала должны содержать список всех ключей активного ресурса, остальные могут быть удалены.Анализ кода
Я смотрю ли T4 способен работать через решение и создать список всех ссылок на «getresource» вспомогательный метод. Полученный список ключей будет активным, остальные могут быть удалены.
Существуют ограничения обоих методов. Метод ведения журналов не хуже кода, охватываемого тестом, и анализ кода может не всегда находить ключи, а не строки, содержащие ключи, поэтому там потребуется некоторая дополнительная ручная работа.
Я думаю, что попробую оба. Я дам вам знать, как это происходит.
Переименуйте свой текущий каталог изображений, а затем создайте новый, выполните поиск в режиме поиска в VS для вашего пути к изображению, то есть «/ content/images», выберите все используемые изображения и перетащите их в новый папке изображений. Затем вы можете исключить старый каталог из проекта или просто удалить его.
Я создал свободный с открытым исходным кодом VS расширения, который выглядит для неиспользуемых изображений в проекте, только что опубликовал первую версию: https://github.com/jitbit/vs-unused-image-finder
Так как я не мог найти быстрый раствора простого и пока я нашел хотя бы решение, которое позволяет мне получить результат, который я ищу, даже если это занимает некоторое время (идеально подходит для ленивого воскресного дня).
Решение включает Visual Studio .NET 2010 и ReSharper (я использую версию 7.1) и выглядит следующим образом.
Шаг за шагом решения
1.) правой кнопкой мыши основной файл RESX в VS.NET и выберите «Поиск использований» из контекстного меню:
Это приведет «Найти результаты» окно ReSharper в.
2.) Дважды щелкните каждое вхождение в окне решения:
Это откроет окно исходного кода с ресурсом.
3.) Переименуйте этот ресурс из окна исходного кода:
Он появится "Переименовать ресурс" диалог ReSharper в.
4.) Дайте ресурсу новое имя с уникальным префиксом. В моем примере это «TaskDialog_»:
Это будет переименовать как ресурс, а также автоматически сгенерированный C# класс обертка/доступа.
5.) Повторите вышеуказанные шаги 2, 3 и 4 для всех ресурсов в окне «Использование».
6.) Откройте файл Resx в редакторе ресурсов Visual Studio и выбрать все файлы без префикса:
7.) Теперь нажмите на кнопку "Удалить ресурс" на верхняя часть окна или просто нажмите Del ключа:
У вас, наконец, есть файл RESX с только активными ресурсами в вашем файле.
8.) (необязательно) Если у вас есть ресурсы на нескольких языках (например, «Resources.de.resx» для немецкого языка), повторите шаги 7 и 8 для этих файлов RESX.
Предупреждение
Пожалуйста, обратите внимание, что это не будет работать, если вы доступ к другим, чем через сильно типизированных, автоматически генерируемой C# класса Resources
строк.
У меня была аналогичная проблема. Несколько тысяч строк ресурсов, которые я создал для таблицы переводов, многие из которых больше не требуются или ссылки по коду. Примерно с 180 зависимыми кодовыми файлами я не мог вручную перейти через каждую строку ресурса.
Следующий код (в см.net) проведет ваш поиск проектов с потерянными ресурсами (в ресурсах проекта , а не в ресурсах отдельных форм). Для моего проекта потребовалось около 1 минуты. Его можно изменить, чтобы найти строки, изображения или любой другой тип ресурса.
Подводя итог;
- 1) Использование файла проекта решение собрать все включенные кодовые модули и присоединяет их в одну строковую переменную;
- 2) Пропускает все объекты ресурса проекта и создает список (в моем случае) тех, которые являются строками;
- 3) Производит ли поиск строк поиск строк строки ресурса в комбинированной текстовой переменной проекта;
- 4) Сообщает объекты ресурсов, на которые не ссылаются.
Функция возвращает имена объектов в буфере обмена Windows для вставки в электронную таблицу или в виде массива списков имен ресурсов.
редактировать: пример вызова модуля: modTest
? modTest.GetUnusedResources("C:\Documents and Settings\me\My Documents\Visual Studio 2010\Projects\myProj\myProj.vbproj", True, true)
'project file is the vbproj file for my solution
Public Function GetUnusedResources(projectFile As String, useClipboard As Boolean, strict As Boolean) As List(Of String)
Dim myProjectFiles As New List(Of String)
Dim baseFolder = System.IO.Path.GetDirectoryName(projectFile) + "\"
'get list of project files
Dim reader As Xml.XmlTextReader = New Xml.XmlTextReader(projectFile)
Do While (reader.Read())
Select Case reader.NodeType
Case Xml.XmlNodeType.Element 'Display beginning of element.
If reader.Name.ToLowerInvariant() = "compile" Then ' only get compile included files
If reader.HasAttributes Then 'If attributes exist
While reader.MoveToNextAttribute()
If reader.Name.ToLowerInvariant() = "include" Then myProjectFiles.Add((reader.Value))
End While
End If
End If
End Select
Loop
'now collect files into a single string
Dim fileText As New System.Text.StringBuilder
For Each fileItem As String In myProjectFiles
Dim textFileStream As System.IO.TextReader
textFileStream = System.IO.File.OpenText(baseFolder + fileItem)
fileText.Append(textFileStream.ReadToEnd)
textFileStream.Close()
Next
' Debug.WriteLine(fileText)
' Create a ResXResourceReader for the file items.resx.
Dim rsxr As New System.Resources.ResXResourceReader(baseFolder + "My Project\Resources.resx")
rsxr.BasePath = baseFolder + "Resources"
Dim resourceList As New List(Of String)
' Iterate through the resources and display the contents to the console.
For Each resourceValue As DictionaryEntry In rsxr
' Debug.WriteLine(resourceValue.Key.ToString())
If TypeOf resourceValue.Value Is String Then ' or bitmap or other type if required
resourceList.Add(resourceValue.Key.ToString())
End If
Next
rsxr.Close() 'Close the reader.
'finally search file string for occurances of each resource string
Dim unusedResources As New List(Of String)
Dim clipBoardText As New System.Text.StringBuilder
Dim searchText = fileText.ToString()
For Each resourceString As String In resourceList
Dim resourceCall = "My.Resources." + resourceString ' find code reference to the resource name
Dim resourceAttribute = "(""" + resourceString + """)" ' find attribute reference to the resource name
Dim searchResult As Boolean = False
searchResult = searchResult Or searchText.Contains(resourceCall)
searchResult = searchResult Or searchText.Contains(resourceAttribute)
If Not strict Then searchResult = searchResult Or searchText.Contains(resourceString)
If Not searchResult Then ' resource name no found so add to list
unusedResources.Add(resourceString)
clipBoardText.Append(resourceString + vbCrLf)
End If
Next
'make clipboard object
If useClipboard Then
Dim dataObject As New DataObject ' Make a DataObject clipboard
dataObject.SetData(DataFormats.Text, clipBoardText.ToString()) ' Add the data in string format.
Clipboard.SetDataObject(dataObject) ' Copy data to the clipboard.
End If
Return unusedResources
End Function
Спасибо, надеюсь, вы не возражаете, добавив лишнюю заметку или две. У нас была форма с несколькими тысячами строк ресурсов, которые нам нужно было исследовать, так что это было полезно на этом пути. Оказалось, что форма имеет свойство Localizable True, поэтому все элементы управления имеют настройки, сохраненные в resx формы. Установка на ложные переключаемые вещи в нормальное состояние и уменьшение размера resz от 600 + k до 35k! –
Я недавно построил инструмент, который обнаруживает и удаляет неиспользуемые строковые ресурсы. Я использовал информацию в этом сообщении как ссылку. Инструмент может быть не идеальным, но он выполняет тяжелую работу и будет полезен, если у вас большой проект с длинной историей. Мы использовали этот инструмент для консолидации файлов ресурсов и удаления неиспользуемых ресурсов (мы избавились от 4000 других ресурсов из 10 000).
Вы можете посмотреть на исходный код, или просто установить ClickOnce здесь: https://resxutils.codeplex.com/
Это выглядело многообещающим (однажды я обнаружил, что вам нужно удалить Resources.Designer.cs, чтобы он показывал какие-либо результаты). Но он не мог найти ссылки в файлах XAML, что является сделкой. – RandomEngy
Я использую ReSharper для поиска неиспользуемых полей ресурсов, а затем удалить их вручную, если проект содержит небольшое количество ресурсов. Некоторый короткий скрипт можно использовать, если у нас уже есть список неиспользуемых элементов.
Решение в следующем:
- показать все неиспользуемые элементы, как описано в этой статье http://chrisseroka.wordpress.com/2013/10/28/find-unused-private-and-public-methods-with-resharper/
- временно удалить * .Designer.cs из порождаемых масок файлов (ReSharper-> Options-> CodeInspection- > GeneratedCode)
- Также комментарий или удаление комментария (что указывает, что код авто сгенерирован) сверху файла Designer.cs, прикрепленного к файлу ресурсов.
У вас будет список всех неиспользуемых ресурсов, оставленных для удаления их из resx.
Недавно ResXManager 1.0.0.41 добавил функцию, показывающую количество ссылок на ресурс строки.
я не мог найти любые существующие решения, которые будут искать ссылки ресурсов строки в XAML файлах и партии-удалить неиспользуемые.
Так что я написал: https://github.com/Microsoft/RESX-Unused-Finder
Он ищет директорию проекта для ссылок на строковые ресурсы, а затем отображает список тех, что не может найти соответствие. Вы можете указать шаблон для поиска, чтобы он мог найти ссылки в файлах XAML.
+1. Дала бы больше, если бы это было возможно. На какое-то время искал отличный инструмент, и этот человек выделяется для меня! Отличная работа ! – DeMama
Этот инструмент замечательный, особенно если вы используете WPF. Мы генерируем классы, которые прокси для AppResources, и этот инструмент отлично справляется с этим. Мы используем пользовательские расширения разметки XAML, и он также работает с этим. Очень хорошо сделано. – Skrymsli
- 1. Найти неиспользуемые ресурсы в .NET решении (.resx)
- 2. Как вы можете найти неиспользуемые пакеты NuGet в решении?
- 3. Найти неиспользуемые классы в проекте .net
- 4. Как найти неиспользуемые части большого приложения .NET?
- 5. Найти неиспользуемые файлы ресурсы (.jsp, .xhtml, изображения) в Eclipse,
- 6. Удалить неиспользуемые ресурсы перед отправкой
- 7. Неиспользуемые ресурсы String и изображений в Android
- 8. Общие ресурсы для всех проектов в решении
- 9. Как удалить неиспользуемые ресурсы из программы OpenGL
- 10. Maven не копирует неиспользуемые ресурсы при выпуске
- 11. Создание Dexguard для не удалить неиспользуемые ресурсы
- 12. Как удалить неиспользуемые ресурсы из библиотек?
- 13. Найти неиспользуемые переменные
- 14. Найти неиспользуемые функции Javascript?
- 15. MySQL найти неиспользуемые таблицы
- 16. Удалить неиспользуемые ресурсы с помощью Android Studio?
- 17. Elm найти неиспользуемые функции
- 18. Найти неиспользуемые функции в модуле
- 19. Как легко найти неиспользуемые общедоступные методы/свойства
- 20. Как найти неиспользуемые свойства для класса iOS?
- 21. Найти неиспользуемые операторы с помощью MonoDevelop
- 22. Найти отсутствующий ожидание в решении
- 23. Найти неиспользуемые строки кода C++
- 24. Java (Android): Найти неиспользуемые классы
- 25. Как найти неиспользуемые настройки django
- 26. Как найти неиспользуемые габаритные зависимости
- 27. Как найти неиспользуемые репозитории Gradle
- 28. Как найти неиспользуемые зависимости sbt?
- 29. Что относительно расходов на неиспользуемые ресурсы в Windows Azure?
- 30. В Google Play хранит неиспользуемые ресурсы от apk?
Вопрос не в физических изображениях в каталогах, а в ресурсах в файлах resx. –