#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 и увидел ваш комментарий сейчас. Это устранило проблему 🙂