升级到c#7.2后,我们的自动构建服务器出现了编译错误。
“功能'只读引用'在c#7.0中不可用。请使用语言7.2或更高版本。”

失败的项目在高级构建选项卡中设置为使用“最新的次要版本”,即7.2。该项目可以在Visual Studio中构建并正常运行。命令行失败并显示该错误。将构建设置显式设置为7.2而不是“最新的次要版本”也会失败。

为什么命令行无法加载最新的语言功能?它在VS ide中起作用吗?

命令行是
“ devenv SolutionFile.sln / Build版本”

用于重现/演示此示例的示例应用程序是一个WPF应用程序,具有一个窗体和一个按钮,以及一个用于传递结构的处理程序。

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private struct Test123
        {
            public string test;
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Test123 test;
            test.test = "foo";
            Test(test);
        }

        private void Test(in Test123 test)
        {
            // do nothing
        }
    }


c# - Devenv命令行版本不使用C#7.2语言功能-LMLPHP

更新:
另外,命令行中存在不匹配的版本。命令行打开,并说它在v15.5.1上。但是,devenv exe提供了较早的版本。
c# - Devenv命令行版本不使用C#7.2语言功能-LMLPHP

最佳答案

我认为,验证已启用C#7.2的最佳方法是直接编辑csproj文件,并确保所有构建配置中都包含<LangVersion>7.2</LangVersion>

例如,发布配置应如下所示:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <PlatformTarget>AnyCPU</PlatformTarget>
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\Release\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
  <LangVersion>7.2</LangVersion>
</PropertyGroup>

10-07 19:54
查看更多