Проблема пространства имен VB.NET, касающаяся явных (именованных) и неявных (глобальных или корневых) пространств имен - PullRequest
1 голос
/ 27 сентября 2010

У меня есть решение, которое содержит много проектов, использующих одно и то же корневое пространство имен. Никакие файлы кода явно не называют пространство имен. Допустим, корневое пространство имен равно ExampleRootNamespace.

Теперь возникает проблема, когда я хочу добавить пространство имен с явным именем в один из файлов кода, над которым я работаю. Я хочу быть в состоянии изолировать этот код от остальной части сборки, чтобы иметь возможность запускать FxCop против него. Поэтому я добавляю что-то вроде Namespace Interfaces.CSV в файл кода.

Это приводит к тому, что любой код, ссылающийся на эту сборку, должен сказать Imports ExampleRootNamespace.Interfaces.CSV. Все идет нормально. Я даже могу запустить FxCop против сборки. Проблема сейчас в том, что в других сборках я не могу больше говорить что-то вроде:

Public class frmInputBoolean Inherits
 ExampleRootNameSpace.frmFormTemplate

Visual Studio теперь просит меня переименовать пространство имен в:

Public class frmInputBoolean Inherits
     Global.ExampleRootNameSpace.frmFormTemplate

Есть сотни ошибок, связанных с этим. Итак, мои вопросы:

1) Почему при первом именовании пространства имен под корнем возникают проблемы с программой?

2) Есть ли обходные пути к этой проблеме без переименования?

Я также хочу добавить, что в отношении ExampleRootNamespace.Interfaces.CSV Я не ссылаюсь на это нигде в кодовой базе. В настоящее время я просто ссылаюсь на него из проекта модульного тестирования. Поэтому я не понимаю, почему при добавлении этого пространства имен возникает проблема.

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Что ж, похоже, это может быть ошибкой в ​​Visual Studio 2008. Поскольку код не изменился, но проблемы с требуемым префиксом Global больше нет.

Я говорю это, потому что я проверил один из кодовых файлов и попытался добавить (как предложил Meakins):

Imports ExampleRootNamespace = Global.ExampleRootNamespace

Когда я это сделал, произошли две вещи.

1) Предложения по выделению ошибок и исправлению ошибок были удалены, и ExampleRootNamespace был распознан Visual Studio. Также код теперь компилируется.

2) Imports ExampleRootNamespace = Global.ExampleRootNamespace недопустимо из-за использования значения Global в операторе импорта. Visual Studio говорит: «Глобальный» не разрешен в этом контексте; ожидается идентификатор. » Это означает, что эта строка кода не будет компилироваться. Поэтому я удалил все это вместе. Как ни странно, несмотря на то, что его там нет (и, следовательно, код возвращается к прежнему), ошибок больше нет.

Я также перезапустил Visual Studio (но после того, как сделал выше). Это довольно странно, если вы спросите меня!

1 голос
/ 27 сентября 2010

В C # попробуйте использовать оператор USING с вашим пространством имен.

using ExampleRootNamespace = newExampleRootNamespace;

О тех, которые имеют глобальную проблему.

к сожалению, я не верю, что в VB.NET для вас существует простое решение

...