使用Visual Studio构建项目很好但是从命令行失败

时间:2017-01-24 11:03:00

标签: c# msbuild

我有一个在Visual Studio 2015中运行时构建良好的解决方案但是当我从命令行运行时遇到错误

错误CS1056:此行中出现意外字符'$'

var CutOffTextFragment = deadLineTime.Deadline.Minute == 0 ? $"{deadLineTime.Deadline:htt}" : $"{deadLineTime.Deadline:h:mmtt}"

deadLineTime.Deadline是一个DateTime对象,代码将返回XAM / PM或X:XXAM / PM

我认为这是因为构建脚本没有使用C#6。目前这个脚本不能改为使用c#6

如果是这种情况,任何人都可以帮我折旧代码,以便它适用于C#5

3 个答案:

答案 0 :(得分:5)

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

然后转到Project属性并更改Target框架上的Application选项以指向最新版本。您无需更改代码以使用string.Format方法替换字符串插值来修复它。

如果您仍然收到此错误,是因为,运行您的构建的编译器不是C#的最新版本,请尝试从Nuget添加Microsoft.Net.Compilers并再次编译,这应该可以解决问题。如果您想避免安装此软件包,请尝试打开.csproj并查看应该指向版本12的ToolsVersion,然后将其更改为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。 根据我的经验,刚刚从Nuget获得包解决了这个问题。 希望这有帮助

答案 1 :(得分:0)

$可以转换为string.format。

var CutOffTextFragment = deadLineTime.Deadline.Minute == 0 
                         ? 
                         string.Format("{0:htt}",deadLineTime.Deadline) 
                         : 
                         string.Format("{0:h:mmtt}", deadLineTime.Deadline);

答案 2 :(得分:-3)

$"{deadLineTime.Deadline:htt}"

的语法糖
string.Format("{0:htt}", deadline.Deadline);

同样适用于

$"{deadLineTime.Deadline:h:mmtt}"

作为

string.Format("{0:h:mmtt}", deadline.Deadline);

尝试替换它们