Пространство имен не найдено ошибка при попытке компиляции

#c# #.net #mono

#c# #.net #моно #mono

Вопрос:

Редактировать: изменение имени класса или имени пространства имен таким образом, чтобы пространство имен и класс не имели одного и того же имени, не устраняет эту проблему.

У меня есть этот супер простой код:

Program.cs Программа.cs:

 using System;
using CodeCleaner;

class Program
{

    private static void Main(string[] args)
    {
        Console.WriteLine("DocTypeChecker instantiated");

        var codeCleaner = new CodeCleaner.CodeCleaner();
    }
}
  

CodeCleaner.cs:

 using System;

namespace CodeCleaner
{
    public class CodeCleaner
    {

        public CodeCleaner()
        {
            Console.WriteLine("CodeCleaner instantiated");
        }

    }
}
  

Это приводит к следующей ошибке при попытке компиляции при запуске $ csc Program.cs :

Program.cs (4,7): ошибка CS0246: не удалось найти тип или имя пространства имен ‘CodeCleaner’ (вам не хватает директивы using или ссылки на сборку?).

Я определенно не пропускаю директиву using для CodeCleaner, но что это значит, assembly reference я понятия не имею. Другие решения в Интернете не помогли мне в этом случае. Кто-нибудь знает об этой проблеме здесь?

Комментарии:

1. Я думаю, что проблема заключается в одном и том же имени пространства имен и имени класса.

2. Дело не в этом. Я попытался изменить имя пространства имен на NCodeCleaner , и проблема сохраняется (затем он говорит namespace name 'NCodeCleaner' not found ), так же проблема.

3. Находится ли CodeCleaner в той же сборке, что и Program? Если нет, то сборка программы должна ссылаться на сборку, в которой есть CodeCleaner.

4. Если имена пространства имен и классов совпадают, это может вызвать проблемы, но не в этом случае, когда он полностью использует пространство имен и имя класса вместе, например : new CodeCleaner.CodeCleaner()

5. просто используйте то же пространство имен для вашего класса Program

Ответ №1:

При запуске csc Program.cs CodeCleaner.cs не будет скомпилирован, поэтому в вашей сборке будет отсутствовать класс CodeCleaner и пространство имен. Использование csc Program.cs CodeCleaner.cs должно сделать свое дело.

Комментарии:

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

2. @erol_smsr Нет, вы можете использовать csc *.cs или csc -recurse:*.cs , если вам также нужно скомпилировать подкаталоги.

3. Спасибо! Я только что нашел это в . NET docs и увидел ваш комментарий сейчас. Это устранило проблему 🙂