Еще нет, насколько я знаю. Я также искал что-то подобное никакому успеху. Я подозреваю, как только F# поражает VS2010 как свою неотъемлемую часть, или еще немного ранее, такие инструменты в конечном счете появятся.
Насколько ReSharper заинтересован, можно хотеть отбросить JetBrains быстрое электронное письмо, было бы интересно знать, есть ли у этих парней какие-либо планы относительно F#.
Одной из законных причин конфликта пространств имен может быть использование внутренних библиотек, которые были написаны для более ранних версий .Net, в котором не было функциональности, добавленной в более поздних версиях. В .Net 1.1 дней, например, Я написал класс реестра, который обернул вызовы реестра API. По чистой случайности имена методов, которые я выбрал, были точно такими же, как и в более позднем классе реестра .Net, и они делали точно такие же вещи, поэтому было легко отключить мой собственный код. Для более сложных задач может быть полезна возможность использовать более старый фрагмент кода с плохим именем с квалификатором global ::
.
Намеренное присвоение имени новому фрагменту кода с использованием существующего пространства имен .Net однако определенно будет запахом кода.
Как правило, global ::
используется для указания «Я хочу начать с вершины структуры пространства имен». Если у меня есть пространство имен MyProduct.System
, то все, что находится в пространстве имен MyProduct
, не сможет получить доступ к пространству имен Microsoft System
. Это запах кода? Может быть, иногда, но не особенно вонючим.
Любой машинный код должен попытаться использовать global ::
, чтобы свести к минимуму возможность конфликтов пространств имен, о которых он может не знать. Более того, любой код, в котором могут возникать конфликты, может быть более конкретным.
У Microsoft есть несколько хороших рекомендаций по пространству имен в превосходной книге Framework Design Guidelines 2nd Ed.
. В общем, они не рекомендуют вводить сложности (например, называть ваш тип Stream).
Я не думаю, что когда-либо использовал квалификатор global ::. Обычно я считаю это запахом кода (хотя есть исключения, как указывают MusiGenesis и шестизначные переменные).
Я думаю, что время от времени случается, что одно из ваших пространств имен имеет имя другого. Например, у меня есть пространство имен .Persistence.NHibernate, где NHibernate также может быть корневым пространством имен сборки NHibernate.
Я не вижу здесь запаха кода, это просто название isses;)