2009-11-26 4 views
5

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

У меня есть одна сборка называется 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 на что-то другое - это слишком много работы.

+0

Я тоже испытываю эту проблему в VS 2010! –

ответ

0

Невозможно обойти это, из того, что я могу сказать.

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

Смежные вопросы