【问题标题】:can you compile a c# script without a csproj file in dotnet 5 and later你能在 dotnet 5 及更高版本中编译没有 csproj 文件的 c# 脚本吗
【发布时间】:2022-12-23 11:41:20
【问题描述】:

我的意思是像在 C++ 中一样,你可以执行 cl.exe main.cpp

我真的没有任何理由这样做,只是好奇

【问题讨论】:

    标签: c#


    【解决方案1】:

    假设“脚本”是指“普通 C# 源文件”,那么是的,绝对是,如果 csc 对您可用:

    程序.cs:

    using System;
    Console.WriteLine("Hello world");
    

    编译:

    csc Program.cs
    

    跑步:

    ./Program.exe
    

    现在,反编译它,它看起来像是默认针对 .NET Framework 而不是 .NET Core,但我希望如果您真的想要通过指定自定义响应文件来更改它是可行的。它为您提供最新的 C# 功能,但如果您使用仅在更高版本的 .NET 上支持的 C# 功能(例如默认接口实现),那么我怀疑您必须明确指定适当的标准库而不是使用默认的.NET 框架的。

    如果 csc 不能作为可执行文件提供给您,DLL 可能仍然可以在 Roslyn/bincore 下的 .NET SDK 目录中使用。

    例如,在我的 WSL2 Ubuntu 安装中,只是尝试运行 csc 失败,但下面的命令肯定会调用 csc:

    dotnet /usr/share/dotnet/sdk/6.0.202/Roslyn/bincore/csc.dll
    

    坏消息是,尝试使用它来编译独立程序需要提供库引用等——这可能比它的价值更麻烦。

    【讨论】:

    • 这似乎只适用于 .net 框架而不是核心
    • @MAR1:我运行的 csc 版本不是 .NET Framework 的一部分(它作为 MSBuild 的一部分安装在 VS2022 中),但我同意它不在 .NET Core SDK 中。我现在没有时间查找详细信息,但我现在将简要更新答案并稍后尝试找到如何将其安装在“纯 .NET Core”系统上。 (你在 Linux 上需要它吗?)
    • 我真的不需要它我只是想知道怎么做,我正在使用 Windows
    • @MAR1:好的,所以如果你在 Windows 上并且安装了 VS2022,它应该可以正常工作。什么确切地你的意思是“而不是核心”?在标准库默认值方面?
    • 它不支持最新的 c# 版本
    【解决方案2】:

    不 - 但是,对于您可能正在寻找的内容,dotnet new console 命令生成一个默认的 csproj,它运行同样生成的 Program.cs 文件。 使用新的(大概)top level statement 文件,您只需插入一些usings 和您的脚本代码,然后使用dotnet run

    如果您使用的是 IDE,它会为您运行所有 dotnet 命令

    【讨论】:

    • 链接可能会随着时间的推移而断开。所以它引用比仅仅共享链接更好。
    【解决方案3】:

    是的,C# 有一个脚本概念 (.csx)。它还有一个 REPL (csi.exe)

    参考资料:https://learn.microsoft.com/en-us/archive/msdn-magazine/2016/january/essential-net-csharp-scripting

    【讨论】:

      【解决方案4】:

      您可以编写批处理或 bash 脚本来 使用所需的参考运行 Roslyn csc 或从 https://github.com/km-hussain-in/CourseSamples/blob/main/CSharp/cscc.zip

      【讨论】:

        猜你喜欢
        • 2022-09-21
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2017-08-26
        • 1970-01-01
        • 2019-07-18
        相关资源
        最近更新 更多