У меня проблема с конфликтующими пространствами имен и кодом, который автоматически создается дизайнером форм в 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 во что-то еще - слишком много работы.