.net Class "не является членом" Class .. хотя это так? - PullRequest
1 голос
/ 11 мая 2010

Просматривая какой-то старый код, я столкнулся со странной ошибкой в ​​пространстве имен.

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

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

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

Ответы [ 3 ]

1 голос
/ 11 мая 2010

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

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

Edit:

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

using myEmployer = global::myEmployer;
1 голос
/ 11 мая 2010

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

0 голосов
/ 11 мая 2010

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

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

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

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

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

...