Пространства имен, псевдонимы и конструктор форм Visual Studio - PullRequest
5 голосов
/ 26 ноября 2009

У меня проблема с конфликтующими пространствами имен и кодом, который автоматически создается дизайнером форм в Visual Studio 2008. Я провел поиск по многим форумам и другой документации, но не смог найти решения этой проблемы.

У меня есть одна сборка Foo.dll со следующим пространством имен / кодом:

namespace Foobar.System
{
    public class MySystemClass() { }
}

Затем у меня есть другая сборка, которая содержит некоторые часто используемые формы:

namespace Foobar.MyCommonForms
{
    public class MyForm : System.Windows.Forms.Form
    {
        public void SomeMethod()
        {
            var systemclass = new Foobar.System.MySystemClass();
        }
    }
}

Здесь компиляторы отображают следующую ошибку: Тип или пространство имен «Windows» не является частью пространства имен «Foobar.System». Очевидно, компилятор пытается найти класс System.Windows.Forms.Form в пространстве имен Foobar.System.Windows.Forms!

Я смог решить эту проблему, используя псевдоним «x» вместо «global» при обращении к сборке Foo.dll, объявив «extern alias x» в моих файлах кода и поместив «x ::» перед каждой ссылкой на типы и классы в пространстве имен Foobar.System. Код компилируется.

Но похоже, что дизайнер форм не распознает это и выдает ошибку при попытке отобразить форму. Это, опять же, может быть решено путем помещения «global ::» перед каждой ссылкой на классы в System.Windows.Forms (например, global :: System.Windows.Forms.Button), но каждый раз, когда есть вероятность, что форма, код автоматически генерируется заново, а часть 'global ::' удаляется.

Итак, вопрос таков: есть ли способ заставить проектировщика форм знать псевдоним 'x', который используется для ссылки на мою сборку Foo.dll, или есть другое, лучшее решение для этого? Переименование пространства имен Foobar.System во что-то еще - слишком много работы.

1 Ответ

0 голосов
/ 26 ноября 2009

Из этого я не могу обойтись.

Популярные инструменты рефакторинга, такие как Resharper или Refactor! оба включают возможность глобального переименования пространства имен. Я бы серьезно подумал об их использовании.

...