Обновлено: изменение имени класса или имени пространства имен, чтобы пространство имен и класс не имели одинакового имени, не решает эту проблему.
У меня есть этот супер простой код:
Программа.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): error CS0246: The type or namespace name 'CodeCleaner' could not be found (are you missing a using directive or an assembly reference?).
Я определенно не пропускаю директиву использования для CodeCleaner, но что она означает с assembly reference
, я понятия не имею. Другие решения в Интернете не помогли мне в этом случае. Кто-нибудь знает проблему здесь?
Это не проблема. Я попытался изменить имя пространства имен на NCodeCleaner
, и проблема не устранена (затем написано namespace name 'NCodeCleaner' not found
), такая же проблема.
CodeCleaner находится в той же сборке, что и Program? Если нет, то сборка программы должна ссылаться на сборку, в которой есть CodeCleaner.
Если пространство имен и имена классов совпадают, это может вызвать проблемы, но не в этом случае, когда он полностью использует пространство имен и имя класса вместе, например: new CodeCleaner.CodeCleaner()
@Loring Я понятия не имею, что я новичок в C#. Есть файл под названием ProjectName.AssemblyInfo.cs
, в котором есть куча информации, например AssemblyFileVersionAttribute(1.0.0.0)
и т. д.
@erol_smsr Какую IDE вы используете?
@Loring Код Visual Studio. Об этом есть пример, но речь идет об установке пакета MySQL с использованием NuGet, что все усложняет. Мне просто нужно, чтобы пространство имен работало, которое я сделал сам, это не пакет NuGet или что-то в этом роде.
просто используйте одно и то же пространство имен для вашего класса Program
Запуск csc Program.cs
не приведет к компиляции CodeCleaner.cs, поэтому в вашей сборке будет отсутствовать класс и пространство имен CodeCleaner. Использование csc Program.cs CodeCleaner.cs
должно помочь.
Я попробую это и обновлю соответственно. Но допустим, я хочу добавить более 1 файла, то есть у меня есть 10 пространств имен и классов. Нужно ли мне перечислять все файлы пространств имен, которые я использую?
@erol_smsr Нет, вы можете использовать csc *.cs
или csc -recurse:*.cs
, если вам также нужно скомпилировать подкаталоги.
Спасибо! Я только что нашел его в документах .NET и увидел ваш комментарий. Это решило проблему :)
Я думаю, что проблема в том же имени для пространства имен и имени класса.