升级到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
}
}
更新:
另外,命令行中存在不匹配的版本。命令行打开,并说它在v15.5.1上。但是,devenv exe提供了较早的版本。
最佳答案
我认为,验证已启用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>