Любой статический анализ такого рода будет очень сложно реализовать правильно. Вы можете использовать эвристику (например, UIElement
), но вы, вероятно, столкнетесь с некоторыми ложными срабатываниями и/или ложными негативами.
Например, FlowDocument
не является результатом UIElement
. Вы можете изменить свою эвристику для тестирования DispatcherObject
-удаленных типов, но тогда это также будет включать Freezable
, что может потребовать или не потребовать контекста - вы не всегда можете знать во время компиляции. Таким образом, это гарантированный ложноположительный (или отрицательный) в общем случае.
В качестве другого примера добавление элементов коллекции, которая отображается как свойство, связанное с данными, также требует контекста, даже если коллекция не является элементом пользовательского интерфейса.
Аналогичные проблемы существуют в ASP.NET. HttpContext.Current
очевидно, но как насчет методов форматирования строк, которые неявно используют текущую культуру? На стороне ASP.NET также есть несколько «gotchas».
Это, я думаю, это хорошая идея; просто убедитесь, что у вас есть простой способ игнорировать ложные срабатывания и ложные негативы.
Вы хотите настроить таргетинг на такие случаи, как [this] (http://stackoverflow.com/q/28410046/1768303), где 'ConfigureAwait (false)' на самом деле добавляет некоторые продолжения маршалинга накладных расходов? – Noseratio