C#VS代码;程序运行错误



我在VS代码方面遇到了一个奇怪的问题。在我当前的工作空间中,我有两个C#文件。一个是"Program.cs",它是.NET Framework附带的默认文件。另一个是我创建的名为"helloworld.cs"的文件。

但是,当我运行"helloworld.cs"文件时,终端中的输出是"Program.cs"文件的输出。我是不是太笨了,还是有什么简单快捷的解决办法?

程序.cshelloworld.cs(终端显示输出(

edit0:输出选项卡中不存在任何内容。已更改设置以在终端中执行代码。

edit1:将"helloworld.cs"中的"void Main(("方法更改为"static void Main(;错误CS0017:程序定义了多个入口点。使用/main编译以指定包含入口点的类型"返回。

dotnet run运行的是项目,而不是您选择的特定源文件,如果您希望入口点是helloWorld文件,那么您可以使用以下dotnet run -main:Test

您可以查看以下文档以获得其他选项,使其发挥作用并进行教育

项目入口点

多入口点

几件事:

  1. 您正在打破一些通常保持目录清洁和可理解的最佳做法。在这种情况下,如果你很难向别人解释为什么你会有2个Main((方法,那么最好一开始就避免使用它们。这并不是说你不能有一个名为Main((的方法。。。然而,请注意,这是C#项目中方法的默认入口点,因此使您很难理解正在发生的事情,而且从本质上讲,其他人可能很难帮助理解您的代码,尤其是,所以当您在代码中添加不是1个而是2个Main((方法时
  2. 根据MSDN(Main((和命令行参数(,您的Test类违反了使用Main((方法的类的原则,因为它没有被声明为静态方法,因此C#编译器不将其识别为我们在样板文件自动生成的C#项目中看到的"常用"Program.Main((方法,而是"恰好"被命名为"Main"的"只是另一个"方法:

Main在类或结构内部声明。Main必须是静态的,并且不需要公开。(在前面的示例中,它接收默认值私人访问。(不需要封闭类或结构是静态的。

让我们继续将"Test.Main(("从"void Main(("更改为"public static void Main(

PS C:>dotnet运行测试C: \helloworld.cs(5,24(:error CS0017:程序定义了多个入口点。使用/main编译以指定包含入口点的类型。[C:\VSCodeIssue.csproj]

您现在遇到了一个错误,编译器让您知道,如果它试图遵循上面MSDN文档中列出的约定,它会对您希望它实际做的事情感到困惑。您对编译器的指示是令人困惑和不明确的。

要修复此问题,如果您绝对必须有2个Main((方法(请参阅上面的#1和#2(,您可以更改.csproj文件以包含"StartupObject"选项:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<StartupObject>Test</StartupObject>
</PropertyGroup>
</Project>

现在,如果您运行"dotnet run",那么.csproj文件中会特别指示C#编译器如何通过"StartupObject"XML元素中的显式指令来解决您在代码中提供的歧义。

PS C:>dotnet运行你好

作为参考,为了清晰起见,我建议按如下方式重新格式化您的代码。这段代码在逻辑上更容易理解,并且不需要对.csproj文件进行非直观的更改即可工作:

public partial class Program
{
static void Main(string[] args)
{
if(args.Length>0 && args[0].ToLowerInvariant() == "bongo")
{
PrintBongo();
}
else
{
PrintWordAndSum();
}
}
static void PrintBongo()
{
string bongo = "Hello";
Console.WriteLine(bongo);
}
static void PrintWordAndSum()
{
int myint = 5;
int youint = 7;
int total = myint + youint;
string word = "word";
System.Console.WriteLine(total);
System.Console.WriteLine(word);
}
}

现在,您按照如下方式调用您的程序来执行"Test"类中最初的操作:

PS C:>dotnet运行bongo你好

然后按如下方式调用程序来执行program.Main((中的原始操作:

PS C:>dotnet运行12单词

最新更新