【问题标题】:Why am I getting "error CS1056: Unexpected character '$'" putting a $ mark here? A problem with my compiler?为什么我会收到“错误 CS1056:意外字符 '$'”在此处放置 $ 标记?我的编译器有问题?
【发布时间】:2019-12-14 06:08:37
【问题描述】:

我正在摆弄我学到的一些新的 C# 代码。我真的是从今天开始学习的,所以这是一个非常新的问题。

基本上,我学会了将 $ 放在字符串前面,以便使用 CodeCademy 中的花括号和变量名进行格式化。在课程中,我学会了像这样使用 C# 的 $ 标记:

using System;

namespace StoryTime
{
  class Program
  {
    static void Main(string[] args)
    {
      // Declare the variables
      string beginning = "Once upon a time,";
      string middle = "The kid climbed a tree";
      string end = "Everyone lived happily ever after.";

      // Interpolate the string and the variables
      string story = $"{beginning} {middle}. {end}";

      // Print the story to the console 
      Console.WriteLine(story);
    }
  }
}

现在我已经结束了在 Visual Studio Code 中编写自己的代码来练习的过程。不幸的是,当我使用 $ 标记时,我的 csc 编译器告诉我:

text.cs(13,28): error CS1056: Unexpected character '$'

这是导致错误的代码:


namespace Textperiment
{
    class Program
    {
        static void Main()
        {
            string a = "alphabet";
            string b = "learn";
            string c = "easy";

            string d = $"I {b}ed the {a} in 1st grade. It was {c}.";
            Console.WriteLine(d);
            Console.WriteLine(d.ToUpper);
        }
    }

我的预期输出是“我在一年级就学会了字母表。这很容易。” $ 启动字符串插值,变量填充它。但是我得到一个错误。

我尝试用谷歌搜索错误并阅读the pages that show up。他们没有希望,因为他们建议安装一些东西,这对于看起来像语法错误的东西来说似乎有点过分了。

该代码在 Visual Studio 2019 中确实有效,因此我认为错误来自使用 csc.exe 作为我的编译器,“此编译器作为 Microsoft (R) .NET Framework 的一部分提供,但仅支持语言版本直到 C# 5,它不再是最新版本。”

在这种情况下,我似乎必须升级,但升级到什么?

在终端中替换 csc.exe 有什么好处?我只想编译可执行文件并运行它们,因为我很乐意在 Visual Studio Code 中编写代码。

【问题讨论】:

  • 你为什么使用csc?从命令行构建的正确方法是使用msbuild。如果您想要更轻松的时间,请使用 .NET Core,您可以使用 dotnet 进行构建。它甚至不需要安装 Visual Studio。
  • 感谢您告知我有关 msbuilddotnet 的信息

标签: c# .net


【解决方案1】:

如上所述here

问题可以通过安装 Nuget 包来解决 Microsoft.Net.Compilers。以下是我突出显示的答案的链接:Project builds fine with Visual Studio but fails from the command line

该功能是 C#6 的语法糖,尝试安装最新的 框架版本 4.6.2 https://www.microsoft.com/en-us/download/details.aspx?id=53345

然后转到您的项目属性并更改应用程序 目标框架上的选项以指向最新的。你不需要 更改代码以替换字符串插值 string.Format 方法来修复它。如果您仍然收到此错误, 是因为,运行您的构建的编译器不是最新的 C# 版本,尝试从 Nuget 添加 Microsoft.Net.Compilers 和 再次编译,应该可以解决问题。如果你想避免 安装此软件包,尝试打开您的 .csproj 并查看 ToolsVersion.that 应该指向版本 12,然后更改它 到 14,但请确保您已安装最新版本的 MSBuild 来自 https://www.microsoft.com/en-us/download/details.aspx?id=48159 或者去 到 C:\Program Files (x86)\MSBuild\14.0\Bin,你应该有这个 带有 csc.exe 编译器的文件夹。如果即使那样也不能解决 问题,然后尝试按照以下步骤操作 https://msdn.microsoft.com/en-us/library/bb383985.aspx.

根据我的经验,我通过 3 种不同的方式解决了这个问题:

1- 刚刚从 Nuget 获取包

2- 在 tfs 服务器上安装 Microsoft Build Tools 2015

3- 大锤和最后一个选项,但对我来说是最好的,因为您不需要处理对 nuget 的依赖,正在运行该进程的 tfs 服务器上安装 Visual Studio 版本。

希望对你有帮助

【讨论】:

  • 使用 .NET Core 是一种更简单的方法,而引用的答案已经过时——最新的 .NET Framework 是 4.8。
【解决方案2】:

到目前为止,我发现的最佳解决方案是安装 Visual Studio 2019。在那里,代码完全按照我的预期运行。我也不必创建可执行文件。但我仍然希望 csc.exe 编译器能够正常工作而不是抛出错误。

【讨论】:

  • 你也可以只使用 .NET Core。 SDK无需Visual Studio即可自行安装,命令行操作非常简单。
猜你喜欢
  • 2021-04-21
  • 2012-03-13
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
相关资源
最近更新 更多