2010-05-11 2 views
1

Осмотрев старый код, я столкнулся с странной ошибкой пространства имен..net Класс «не является членом« класса », хотя это так?

Предположим, у меня есть два проекта: HelperProject и WebProject. Полное пространство имен каждого - как указано в свойствах приложения - это myEmployer.HelperProject и myEmployer.Web.WebProject.

Страницы в веб-проекте полны инструкций, которые используют классы из вспомогательного проекта. Операций импорта/использования нет, но есть ссылка на вспомогательный проект, добавленный в корзину. Несколько примеров строк может быть:

myEmployer.HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 
myEmploter.HelperProject.Utils.StringHelper.EstimatePixelLength(Text, 11) 

Однако каждая строка, которая написана таким образом бросает ошибку «HelperProject» не является членом «myEmployer». Если вы заявляете такие заявления:

HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 
HelperProject.Utils.StringHelper.EstimatePixelLength(Text, 11) 

Все кажется прекрасным.

В браузере объектов решения и папке bin появляется HelperProject с полным пространством имен myEmployer.HelperProject.

Я не хочу менять все утверждения, и, кроме того, я подозреваю, что это маскирует более фундаментальную проблему. Но я понятия не имею, что происходит. Может ли кто-нибудь предложить какие-либо указатели, пожалуйста?

Приветствия, Matt

ответ

1

У вас есть конфликт пространства имен, myEmployer - пространство классов или подпространств пространства имен, в котором выполняется вызов. Попробуйте изменить на ссылок на следующий формат:

global::myEmployer.HelperProject.StringHelper.GetFixedLengthText(Text, "", Me.Width, 11) 

Edit:

Если вы добавите ниже, используя заявление он будет должен удалить неоднозначность, указав компилятору, что в контексте данного класса myEmploye. означает global :: myEmployer, а не какой-либо другой класс или namespasce, называемый myEmployer.

using myEmployer = global::myEmployer; 
+0

Дa, добавив глобальное удаляет ошибку. Так что это значит? –

+0

Это означает, что у вас есть конфликт пространства имен в том, что myEmployer.HelperProject неоднозначен. Если вы отредактировали мой пост с помощью решения, чтобы вам не пришлось изменять все утверждения. –

1

Пространство имен в свойствах приложения применяется только к новым файлам, созданным. Если вы измените пространство имен в своих без изменения существующих файлов, их пространство имен будет таким, как указано в файлах.

0

Во-первых, как сказал ск, пространство имен по умолчанию в настройках статьями проекта используется только для получения имен при ceating новых файлов (класс). Поэтому вы должны проверить, что в ваших файлах у вас есть правильное пространство имен. Например:

namespace myEmployer.HelperProject 
{ 
    public class StringHelper 
    { 
     public static string GetFixedLengthText(...) 
     {} 
    } 
} 

Если это не так, например. namespace HelperProject, вы получите ошибку.

Если пространства имен верны, у вас может быть локальная переменная или поле или подобное, также называемое myEmployer. Попробуйте щелкнуть правой кнопкой мыши по myEmployer и выбрать «Перейти к определению» (или нажать F12).

P.S .: Стандартный корпус для пространств имен PascalCasing, т.е. MyEmployer. *

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