C# 9顶级程序是否可以在没有csproj的情况下运行?

23

即将推出的 C# 9 的一个特性是所谓的顶层程序。这样你就可以不使用类,直接编写以下内容。

using System;

Console.WriteLine("Hello World!");

并且dotnet run将为您启动它。

对我来说有效,但前提是我还必须添加一个像下面这样的.csproj文件

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net5.0</TargetFramework>
    </PropertyGroup>
</Project>

有没有一种方法可以将.csproj从图片中跳过?:)让只有一个Program.cs文件,而且什么也没有。


1
你可以使用 csi.exe 运行程序。我知道这不是你想要的,也不是 9.0 的未来,但或许它会有用。 - Aluan Haddad
2
别担心,通常我们在编写紧凑代码时不计算 csproj 文件的内容... - Caius Jard
1
https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-new - Hans Passant
2个回答

21

没有。 csproj 文件告诉编译器要生成什么类型的输出。

它还引用了任何需要的库,在您的情况下,这就是 SDK:https://learn.microsoft.com/en-us/dotnet/core/tools/csproj

元包是根据项目文件中 <TargetFramework><TargetFrameworks> 属性指定的目标框架隐式引用的。

没有它,.NET Core 就会缺少有关如何构建和编译的信息。您甚至无法使用对 System 命名空间的引用。


1
那么,可以得出这样一个结论:dotnet run 没有任何命令行参数可以替代并使 csproj 失效,是吗? - Prime
您可以在此处自行检查选项:https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-build。没有构建它的方法。即使有,也无法运行MsBuild,因为它需要csproj或sln和csproj之一。 - Athanasios Kataras
1
可以为.NET CLI编写扩展,因此从技术上讲,可以创建一个扩展来代替运行,并输出具有默认值或基于扩展支持的参数的.csproj文件。不过,我不确定除了可能强制执行某些内部策略外还有什么价值。 - Mike Hanson
1
@Athanasios MSbuild可能仍需要一个实际的类和所有其他样板,这些内容在预构建步骤中添加。因此,再添加一个预构建步骤并不太困难。考虑到该功能的主要用例,我想这是可以实现的。 - Voo

3

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