从命令行编译新的 C# 版本(C# 7.0 更高版本)

Posted

技术标签:

【中文标题】从命令行编译新的 C# 版本(C# 7.0 更高版本)【英文标题】:Compiling New C# Versions (C# 7.0 Higher) From The Command Line 【发布时间】:2022-01-19 05:47:52 【问题描述】:

当我尝试使用 Microsoft 的 Visual C# 编译器 (v4.8.4084.0) 从命令行编译源代码时,我收到以下错误和/或警告:

PS C:\> csc Program.cs

此编译器作为 Microsoft (R) .NET Framework 的一部分提供,但仅支持 C# 5 以下的语言版本,该版本不再是最新版本。对于支持较新版本 C# 编程语言的编译器,请参阅http://go.microsoft.com/fwlink/?LinkID=533240

作为 Roslyn 项目的一部分,C# 7.0 语言功能目前正在开发中;但 C# 编程语言的当前版本是C# 10。有没有办法从命令行使用C# 7.0 高级语言功能

【问题讨论】:

以下内容可能会有所帮助:docs.microsoft.com/en-us/visualstudio/msbuild/… 【参考方案1】:

如果您安装了 Visual Studio,您应该在“开发人员命令提示符”的开始菜单中获得一个条目。这将在您的路径中包含最新的 csc 和 msbuild。您必须已将旧的(未维护的)工具添加到您的 PATH 中,这就是您收到该错误的原因。

【讨论】:

为了解决这个问题,在浏览论坛的时候,发现在.csproj<TargetFramework>属性中使用的.NET版本应该指定为net45 > 文件。我尝试了此设置,但收到的反馈是系统上未安装 .NET Framework 4.5。当我想安装 .NET Framework 4.5 时,我被告知 .NET Framework 4.5 已经安装。我很困惑该怎么做。 如您所说,我通过在 Visual Studio IDEDeveloper PowerShell 中提供 dotnet new console 命令创建了该项目。我测试了文章"What's new in C# 8.0" 中的一些示例,程序运行良好。在这个阶段,我在 *csproj 文件中测试了@raBinn 在他的帖子中提到的<LangVersion> 功能,但我意识到我是否使用它并不重要。谢谢。【参考方案2】:

尝试打开 *.csproj 文件并添加到 <PropertyGroup> 标记。我将它添加到 DEBUGRELEASE 标记中。

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <Prefer32Bit>false</Prefer32Bit>
        <!-- Using the following property will work. -->
        <LangVersion>8.0</LangVersion>
    </PropertyGroup>
</Project>

【讨论】:

我试过了,可惜没有成功。

以上是关于从命令行编译新的 C# 版本(C# 7.0 更高版本)的主要内容,如果未能解决你的问题,请参考以下文章

从命令行编译 C# 7.2 项目

C#元组类型System.ValueTuple

C# 编译器 /optimize 命令行选项会影响 JITter 吗?

像go 一样 打造.NET 单文件应用程序的编译器项目bflat 发布 7.0版本

Nest Client c# 7.0 用于弹性搜索删除别名

如何在命令行中编译 ZipFile 类(C#)