【问题标题】:C# 9 top-level programs without csproj?没有 csproj 的 C# 9 顶级程序?
【发布时间】:2020-10-17 06:05:36
【问题描述】:

即将到来的 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 文件,仅此而已。

【问题讨论】:

标签: c# c#-9.0


【解决方案1】:

不,没有。 csproj 文件向编译器解释了要生成什么样的输出。

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

基于项目文件的&lt;TargetFramework&gt;&lt;TargetFrameworks&gt; 属性中指定的目标框架隐式引用元包。

没有它,net core 将丢失有关构建什么以及如何构建的信息。您甚至没有对 System 命名空间的引用。

【讨论】:

  • 所以假设dotnet run 没有命令行参数可以替代 csproj 并使其变得多余是正确的?
  • 您可以在此处自行检查选项:docs.microsoft.com/en-us/dotnet/core/tools/dotnet-build 无法构建它。即使有,也无法运行 MsBuild,它需要一个 csproj 或一个 sln 和 csproj。
  • 可以为 .NET CLI 编写扩展,因此从技术上讲,可以创建一个您使用的扩展,而不是运行输出具有默认值或基于扩展支持的参数的 .csproj 文件。我不确定我是否看到了其中的价值,除了可能执行一些内部政策
  • @Athanasios MSbuild 大概仍然需要一个实际的类和所有其他样板,并且是在预构建步骤中添加的。所以多做一个预构建步骤不会太难。鉴于此功能的主要用例,我想这不是不可能的。
【解决方案2】:

您可以创建一个 C# 脚本文件 (.csx) 并使用来自

dotnet script 工具运行它

https://github.com/filipw/dotnet-script

但不是真实有效的 C# 文件号

【讨论】:

    猜你喜欢
    • 2023-01-27
    • 2021-12-25
    • 2021-03-17
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多