如何在dot net core中设置默认文件(起始点)

10

我正在尝试探索DotNet Core的功能,以更好地理解它,为此我执行了以下操作:

dotnet new
dotnet build
dotnet run

在命令提示符窗口中输入命令,它会为我创建一个项目,并创建了一个名为Project.cs的文件,最后在窗口中显示了Hello World!
现在我在相同的文件夹结构中添加了另一个文件,文件名为SampleDotNetCoreApp.cs。我想知道如何将SampleDotNetCoreApp.cs设置为程序执行的默认起始点,当我执行dotnet run命令时。
换句话说,当我在同一文件夹中有多个cs文件时,我想知道如何更改dot net core的起始执行点。
4个回答

12
你可以编辑"Project.csproj"文件,以指定使用哪个Main方法。
<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <StartupObject>Project.SampleDotNetCoreApp</StartupObject>
</PropertyGroup>
请注意 StartupObject 标签,它标识了程序启动时要使用的类。这个类必须有一个 static Main(string[] args) 方法。
请使用 dotnet restore 以确保更改被成功保存,然后构建 / 运行项目。

dotnet rundotnet build 会执行自动还原,因此手动执行这些步骤是不必要的。

- 是的,我知道我来晚了,但我刚刚遇到了这个问题,发现它很难解决。不妨分享一下我新获得的智慧。

2
正确的方法是在不删除代码的情况下,确保只有一个主方法,并且至少具有以下内容:.NET命令行工具(1.1.6)Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core。要使用以下参数调用构建:dotnet build /property:StartupObject=namespace.ClassWithMain。非常令人困惑的是,错误消息指向了一个根本不支持的/main - 我最终从这里找到了正确的属性(请注意,我曾经使用/property:main或/property:Main,但都没有用):dotnet build specify main method。希望能对你有所帮助。

/main-main 是 C# 编译器可执行文件 csc.exe 的一个选项。它应该等同于 MSBuild 属性 StartupObject。请参阅 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/advanced。 - Ghost4Man

1
程序的入口点由静态的Main方法定义。
执行dotnet new时,会在Program.cs中创建此方法。
public static void Main(string[] args)
{
    Console.WriteLine("Hello World!");
}

这将成为程序的入口点(因为它是项目中唯一的static Main方法)。

要从命令行添加一个带有static Main方法的新.cs文件,您可以使用:

echo using System;namespace ConsoleApplication{public class SampleDotNetCoreApp{public static void Main(string[] args){Console.WriteLine("Hello NEW World!");}}} > SampleDotNetCoreApp.cs

然而,如果您现在运行dotnet build,您将收到以下错误:

程序定义了多个入口点。使用/main编译以指定包含入口点的类型。

因为有2个static Main方法。我还不能理解Compile with /main的含义,但为了克服这个错误,您可以运行类似于上面的echo命令,但这次修改Program.cs

echo using System;namespace ConsoleApplication{public class Program{public static void MainOLD(string[] args){Console.WriteLine("Hello World!");}}} > Program.cs

现在你只有一个 static Main,你可以运行。
dotnet build
dotnet run

并查看输出:

Hello NEW World!

这几乎肯定不是推荐的做法,但希望它能给你一些思路。

0

像Java使用javac -“文件名”一样,我们在Dot Net Core中有类似的东西吗?这样我就可以执行不同的文件了。 - Nishant Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接