【发布时间】:2019-12-21 09:47:54
【问题描述】:
我正在努力从命令行编译我的 C# 项目。我做了 2 个简单的类来呈现这个问题。我有一个 Person 类和一个存储 Person 数组的 Registry 类。当我尝试使用 csc 编译注册表文件时,我得到“Registry.cs(4,5): error CS0246: The type or namespace name 'Person' could not be found (are you missing a using directive or an assembly reference?)”
一段时间后我发现一个笨拙的解决方法是将Person.cs 文件编译为.dll 文件(使用csc /target:library Person.cs),然后在我尝试编译Registry.cs(csc /r:"./Person.dll" /out:test.exe Registry.cs)时引用库文件.这可行,但似乎根本不是正确的工作流程。如果你遇到过类似的情况,请帮忙。下面是这两个类的源代码。
Person.cs
using System;
namespace ClassTest {
public class Person {
private string Name {set; get;}
private int Age {set; get;}
public Person(string name, int age) {
Name = name;
Age = age;
}
public void GetInfo() {
Console.WriteLine("Name: " + Name);
Console.WriteLine("Age: " + Age + "\n");
}
}
}
Registry.cs
using System;
namespace ClassTest {
public class Registry {
Person[] citizens;
public Registry() {
citizens = new Person[2];
citizens[0] = new Person("John", 30);
citizens[1] = new Person("Mary", 22);
foreach (Person p in citizens) {
p.GetInfo();
}
}
public static void Main() {
Console.WriteLine("");
Registry r = new Registry();
}
}
}
【问题讨论】:
-
我没有看到任何命名空间声明,但我很确定这是强制性的?只有像 SharpLab 这样的东西似乎在本地课程中跳过它们。
-
stackoverflow.com/questions/3750531/… 似乎不是强制性的。
-
您链接的线程中的每个答案都说明了这件事,您绝对应该拥有一个。很可能这个编译器不够健壮,无法正确理解 Person 的意思是“这个项目的人类”。
-
将命名空间 ClassTest 添加到 Person.cs 可以消除有关 Person 类的错误。但是,现在我得到了同样的错误,但对于命名空间 ClassTest。 “Registry.cs(4,5):错误 CS0246:找不到类型或命名空间名称“ClassTest”(您是否缺少 using 指令或程序集引用?)”
-
TestClass 必须在同一个命名空间中,或者通过 using 指令使用它。也许“全局”命名空间也可以,但它很丑。
标签: c# visual-studio-code compiler-errors compilation namespaces